// Copyright (C) 2004 Peder Holt // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_TYPE_TRAITS_MSVC_REMOVE_REFERENCE_HOLT_2004_0827 #define BOOST_TYPE_TRAITS_MSVC_REMOVE_REFERENCE_HOLT_2004_0827 #include #include namespace cutl_details_boost { namespace detail { template struct remove_reference_impl_typeof { template struct inner { typedef T type; }; }; template<> struct remove_reference_impl_typeof { template struct inner { template static msvc_register_type test(U&(*)()); static msvc_register_type test(...); BOOST_STATIC_CONSTANT(unsigned,register_test=sizeof(test( (T(*)())(NULL) ) )); typedef typename msvc_extract_type::id2type::type type; }; }; } //namespace detail template struct remove_reference { typedef typename cutl_details_boost::detail::remove_reference_impl_typeof< cutl_details_boost::is_reference::value >::template inner >::type type; BOOST_MPL_AUX_LAMBDA_SUPPORT(1,remove_reference,T) }; } //namespace cutl_details_boost #endif //BOOST_TYPE_TRAITS_MSVC_REMOVE_REFERENCE_HOLT_2004_0827