/extlibs/Boost/include/boost/mpl/aux_/has_rebind.hpp
C++ Header | 99 lines | 71 code | 18 blank | 10 comment | 6 complexity | f6fb9688e1ec441d0fce5e0bd0693caa MD5 | raw file
1 2#ifndef BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED 3#define BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED 4 5// Copyright Aleksey Gurtovoy 2002-2004 6// 7// Distributed under the Boost Software License, Version 1.0. 8// (See accompanying file LICENSE_1_0.txt or copy at 9// http://www.boost.org/LICENSE_1_0.txt) 10// 11// See http://www.boost.org/libs/mpl for documentation. 12 13// $Id: has_rebind.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ 14// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ 15// $Revision: 49267 $ 16 17#include <boost/mpl/aux_/config/msvc.hpp> 18#include <boost/mpl/aux_/config/intel.hpp> 19#include <boost/mpl/aux_/config/workaround.hpp> 20 21#if BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION) 22# include <boost/mpl/has_xxx.hpp> 23#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300) 24# include <boost/mpl/has_xxx.hpp> 25# include <boost/mpl/if.hpp> 26# include <boost/mpl/bool.hpp> 27# include <boost/mpl/aux_/msvc_is_class.hpp> 28#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) 29# include <boost/mpl/if.hpp> 30# include <boost/mpl/bool.hpp> 31# include <boost/mpl/aux_/yes_no.hpp> 32# include <boost/mpl/aux_/config/static_constant.hpp> 33# include <boost/type_traits/is_class.hpp> 34#else 35# include <boost/mpl/aux_/type_wrapper.hpp> 36# include <boost/mpl/aux_/yes_no.hpp> 37# include <boost/mpl/aux_/config/static_constant.hpp> 38#endif 39 40namespace boost { namespace mpl { namespace aux { 41 42#if BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION) 43 44BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_rebind, rebind, false) 45 46#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300) 47 48BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_rebind_impl, rebind, false) 49 50template< typename T > 51struct has_rebind 52 : if_< 53 msvc_is_class<T> 54 , has_rebind_impl<T> 55 , bool_<false> 56 >::type 57{ 58}; 59 60#else // the rest 61 62template< typename T > struct has_rebind_tag {}; 63no_tag operator|(has_rebind_tag<int>, void const volatile*); 64 65# if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) 66template< typename T > 67struct has_rebind 68{ 69 static has_rebind_tag<T>* get(); 70 BOOST_STATIC_CONSTANT(bool, value = 71 sizeof(has_rebind_tag<int>() | get()) == sizeof(yes_tag) 72 ); 73}; 74# else // __BORLANDC__ 75template< typename T > 76struct has_rebind_impl 77{ 78 static T* get(); 79 BOOST_STATIC_CONSTANT(bool, value = 80 sizeof(has_rebind_tag<int>() | get()) == sizeof(yes_tag) 81 ); 82}; 83 84template< typename T > 85struct has_rebind 86 : if_< 87 is_class<T> 88 , has_rebind_impl<T> 89 , bool_<false> 90 >::type 91{ 92}; 93# endif // __BORLANDC__ 94 95#endif 96 97}}} 98 99#endif // BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED