123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #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(BOOST_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(BOOST_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 // BOOST_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 // BOOST_BORLANDC
- #endif
- }}}
- #endif // BOOST_MPL_AUX_HAS_REBIND_HPP_INCLUDED
|