100 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
#ifndef BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED
 | 
						|
#define BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED
 | 
						|
 | 
						|
// Copyright Aleksey Gurtovoy 2002-2004
 | 
						|
//
 | 
						|
// Distributed under the Boost Software License, Version 1.0. 
 | 
						|
// (See accompanying file LICENSE_1_0.txt or copy at 
 | 
						|
// http://www.boost.org/LICENSE_1_0.txt)
 | 
						|
//
 | 
						|
// See http://www.boost.org/libs/mpl for documentation.
 | 
						|
 | 
						|
// $Id$
 | 
						|
// $Date$
 | 
						|
// $Revision$
 | 
						|
 | 
						|
#include <boost/mpl/aux_/config/msvc.hpp>
 | 
						|
#include <boost/mpl/aux_/config/intel.hpp>
 | 
						|
#include <boost/mpl/aux_/config/workaround.hpp>
 | 
						|
 | 
						|
#if BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION)
 | 
						|
#   include <boost/mpl/has_xxx.hpp>
 | 
						|
#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)
 | 
						|
#   include <boost/mpl/has_xxx.hpp>
 | 
						|
#   include <boost/mpl/if.hpp>
 | 
						|
#   include <boost/mpl/bool.hpp>
 | 
						|
#   include <boost/mpl/aux_/msvc_is_class.hpp>
 | 
						|
#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
 | 
						|
#   include <boost/mpl/if.hpp>
 | 
						|
#   include <boost/mpl/bool.hpp>
 | 
						|
#   include <boost/mpl/aux_/yes_no.hpp>
 | 
						|
#   include <boost/mpl/aux_/config/static_constant.hpp>
 | 
						|
#   include <boost/type_traits/is_class.hpp>
 | 
						|
#else
 | 
						|
#   include <boost/mpl/aux_/type_wrapper.hpp>
 | 
						|
#   include <boost/mpl/aux_/yes_no.hpp>
 | 
						|
#   include <boost/mpl/aux_/config/static_constant.hpp>
 | 
						|
#endif
 | 
						|
 | 
						|
namespace boost { namespace mpl { namespace aux {
 | 
						|
 | 
						|
#if BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION)
 | 
						|
 | 
						|
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_rebind, rebind, false)
 | 
						|
 | 
						|
#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300)
 | 
						|
 | 
						|
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_rebind_impl, rebind, false)
 | 
						|
 | 
						|
template< typename T >
 | 
						|
struct has_rebind
 | 
						|
    : if_< 
 | 
						|
          msvc_is_class<T>
 | 
						|
        , has_rebind_impl<T>
 | 
						|
        , bool_<false>
 | 
						|
        >::type
 | 
						|
{
 | 
						|
};
 | 
						|
 | 
						|
#else // the rest
 | 
						|
 | 
						|
template< typename T > struct has_rebind_tag {};
 | 
						|
no_tag operator|(has_rebind_tag<int>, void const volatile*);
 | 
						|
 | 
						|
#   if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610))
 | 
						|
template< typename T >
 | 
						|
struct has_rebind
 | 
						|
{
 | 
						|
    static has_rebind_tag<T>* get();
 | 
						|
    BOOST_STATIC_CONSTANT(bool, value = 
 | 
						|
          sizeof(has_rebind_tag<int>() | get()) == sizeof(yes_tag)
 | 
						|
        );
 | 
						|
};
 | 
						|
#   else // __BORLANDC__
 | 
						|
template< typename T >
 | 
						|
struct has_rebind_impl
 | 
						|
{
 | 
						|
    static T* get();
 | 
						|
    BOOST_STATIC_CONSTANT(bool, value = 
 | 
						|
          sizeof(has_rebind_tag<int>() | get()) == sizeof(yes_tag)
 | 
						|
        );
 | 
						|
};
 | 
						|
 | 
						|
template< typename T >
 | 
						|
struct has_rebind
 | 
						|
    : if_< 
 | 
						|
          is_class<T>
 | 
						|
        , has_rebind_impl<T>
 | 
						|
        , bool_<false>
 | 
						|
        >::type
 | 
						|
{
 | 
						|
};
 | 
						|
#   endif // __BORLANDC__
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
}}}
 | 
						|
 | 
						|
#endif // BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED
 |