diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-06-28 17:17:23 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-06-28 17:17:23 +0200 |
commit | b51965dddbed68f23c5e8c169c23c794313ce5f6 (patch) | |
tree | 37bbdf4e5b1cdd34ea0694a5abd1483d1de2b3af /cutl/details/boost/mpl/aux_/has_rebind.hpp | |
parent | 5f06e7e30e4f511ce2fb27c5feefa6aeb6f00841 (diff) |
Add boost subset as an implementation detail
Diffstat (limited to 'cutl/details/boost/mpl/aux_/has_rebind.hpp')
-rw-r--r-- | cutl/details/boost/mpl/aux_/has_rebind.hpp | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/cutl/details/boost/mpl/aux_/has_rebind.hpp b/cutl/details/boost/mpl/aux_/has_rebind.hpp new file mode 100644 index 0000000..742bae2 --- /dev/null +++ b/cutl/details/boost/mpl/aux_/has_rebind.hpp @@ -0,0 +1,99 @@ + +#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: has_rebind.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <cutl/details/boost/mpl/aux_/config/msvc.hpp> +#include <cutl/details/boost/mpl/aux_/config/intel.hpp> +#include <cutl/details/boost/mpl/aux_/config/workaround.hpp> + +#if BOOST_WORKAROUND(__EDG_VERSION__, <= 244) && !defined(BOOST_INTEL_CXX_VERSION) +# include <cutl/details/boost/mpl/has_xxx.hpp> +#elif BOOST_WORKAROUND(BOOST_MSVC, < 1300) +# include <cutl/details/boost/mpl/has_xxx.hpp> +# include <cutl/details/boost/mpl/if.hpp> +# include <cutl/details/boost/mpl/bool.hpp> +# include <cutl/details/boost/mpl/aux_/msvc_is_class.hpp> +#elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) +# include <cutl/details/boost/mpl/if.hpp> +# include <cutl/details/boost/mpl/bool.hpp> +# include <cutl/details/boost/mpl/aux_/yes_no.hpp> +# include <cutl/details/boost/mpl/aux_/config/static_constant.hpp> +# include <cutl/details/boost/type_traits/is_class.hpp> +#else +# include <cutl/details/boost/mpl/aux_/type_wrapper.hpp> +# include <cutl/details/boost/mpl/aux_/yes_no.hpp> +# include <cutl/details/boost/mpl/aux_/config/static_constant.hpp> +#endif + +namespace cutl_details_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 |