Chris@16: // Copyright David Abrahams 2002. Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: #ifndef INDIRECT_TRAITS_DWA2002131_HPP Chris@16: # define INDIRECT_TRAITS_DWA2002131_HPP Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: Chris@16: # include Chris@16: Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: Chris@16: Chris@16: namespace boost { namespace detail { Chris@16: Chris@16: namespace indirect_traits { Chris@16: Chris@16: template Chris@16: struct is_reference_to_const : mpl::false_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_const : mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: # if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround Chris@16: template Chris@16: struct is_reference_to_const : mpl::true_ Chris@16: { Chris@16: }; Chris@16: # endif Chris@16: Chris@16: template Chris@16: struct is_reference_to_function : mpl::false_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_function : is_function Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_pointer_to_function : mpl::false_ Chris@16: { Chris@16: }; Chris@16: Chris@16: // There's no such thing as a pointer-to-cv-function, so we don't need Chris@16: // specializations for those Chris@16: template Chris@16: struct is_pointer_to_function : is_function Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_member_function_pointer_impl : mpl::false_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_member_function_pointer_impl Chris@16: : is_member_function_pointer::type> Chris@16: { Chris@16: }; Chris@16: Chris@16: Chris@16: template Chris@16: struct is_reference_to_member_function_pointer Chris@16: : is_reference_to_member_function_pointer_impl Chris@16: { Chris@16: BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T)) Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_function_pointer_aux Chris@16: : mpl::and_< Chris@16: is_reference Chris@16: , is_pointer_to_function< Chris@16: typename remove_cv< Chris@16: typename remove_reference::type Chris@16: >::type Chris@16: > Chris@16: > Chris@16: { Chris@16: // There's no such thing as a pointer-to-cv-function, so we don't need specializations for those Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_function_pointer Chris@16: : mpl::if_< Chris@16: is_reference_to_function Chris@16: , mpl::false_ Chris@16: , is_reference_to_function_pointer_aux Chris@16: >::type Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_non_const Chris@16: : mpl::and_< Chris@16: is_reference Chris@16: , mpl::not_< Chris@16: is_reference_to_const Chris@16: > Chris@16: > Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_volatile : mpl::false_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_volatile : mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: # if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround Chris@16: template Chris@16: struct is_reference_to_volatile : mpl::true_ Chris@16: { Chris@16: }; Chris@16: # endif Chris@16: Chris@16: Chris@16: template Chris@16: struct is_reference_to_pointer : mpl::false_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_pointer : mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_pointer : mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_pointer : mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_pointer : mpl::true_ Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_reference_to_class Chris@16: : mpl::and_< Chris@16: is_reference Chris@16: , is_class< Chris@16: typename remove_cv< Chris@16: typename remove_reference::type Chris@16: >::type Chris@16: > Chris@16: > Chris@16: { Chris@16: BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T)) Chris@16: }; Chris@16: Chris@16: template Chris@16: struct is_pointer_to_class Chris@16: : mpl::and_< Chris@16: is_pointer Chris@16: , is_class< Chris@16: typename remove_cv< Chris@16: typename remove_pointer::type Chris@16: >::type Chris@16: > Chris@16: > Chris@16: { Chris@16: BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_class,(T)) Chris@16: }; Chris@16: Chris@16: Chris@16: } Chris@16: Chris@16: using namespace indirect_traits; Chris@16: Chris@16: }} // namespace boost::python::detail Chris@16: Chris@16: #endif // INDIRECT_TRAITS_DWA2002131_HPP