From ed6115361006240e3c7b02295599e4534cc55a13 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sat, 19 Oct 2013 08:57:20 +0200 Subject: Update internal Boost subset to 1.54.0 --- cutl/details/boost/type_traits/remove_pointer.hpp | 53 ++++++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) (limited to 'cutl/details/boost/type_traits/remove_pointer.hpp') diff --git a/cutl/details/boost/type_traits/remove_pointer.hpp b/cutl/details/boost/type_traits/remove_pointer.hpp index 46d3fc8..6aa2c0e 100644 --- a/cutl/details/boost/type_traits/remove_pointer.hpp +++ b/cutl/details/boost/type_traits/remove_pointer.hpp @@ -9,12 +9,17 @@ #ifndef BOOST_TT_REMOVE_POINTER_HPP_INCLUDED #define BOOST_TT_REMOVE_POINTER_HPP_INCLUDED -#include #include #include +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +#include +#endif #if BOOST_WORKAROUND(BOOST_MSVC,<=1300) #include +#elif defined(BOOST_MSVC) +#include +#include #endif // should be the last #include @@ -22,7 +27,51 @@ namespace cutl_details_boost { -#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +#ifdef BOOST_MSVC + +namespace detail{ + + // + // We need all this crazy indirection because a type such as: + // + // T (*const)(U) + // + // Does not bind to a or partial specialization with VC10 and earlier + // + template + struct remove_pointer_imp + { + typedef T type; + }; + + template + struct remove_pointer_imp + { + typedef T type; + }; + + template + struct remove_pointer_imp3 + { + typedef typename remove_pointer_imp::type>::type type; + }; + + template + struct remove_pointer_imp3 + { + typedef T type; + }; + + template + struct remove_pointer_imp2 + { + typedef typename remove_pointer_imp3::value>::type type; + }; +} + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,typename cutl_details_boost::detail::remove_pointer_imp2::type) + +#elif !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,T) BOOST_TT_AUX_TYPE_TRAIT_PARTIAL_SPEC1_1(typename T,remove_pointer,T*,T) -- cgit v1.1