diff options
Diffstat (limited to '3rdParty/Boost/src/boost/type_traits/remove_pointer.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/type_traits/remove_pointer.hpp | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/3rdParty/Boost/src/boost/type_traits/remove_pointer.hpp b/3rdParty/Boost/src/boost/type_traits/remove_pointer.hpp index 5359992..01253db 100644 --- a/3rdParty/Boost/src/boost/type_traits/remove_pointer.hpp +++ b/3rdParty/Boost/src/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 <boost/type_traits/broken_compiler_spec.hpp> #include <boost/config.hpp> #include <boost/detail/workaround.hpp> +#ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +#include <boost/type_traits/broken_compiler_spec.hpp> +#endif #if BOOST_WORKAROUND(BOOST_MSVC,<=1300) #include <boost/type_traits/msvc/remove_pointer.hpp> +#elif defined(BOOST_MSVC) +#include <boost/type_traits/remove_cv.hpp> +#include <boost/type_traits/is_pointer.hpp> #endif // should be the last #include @@ -22,7 +27,51 @@ namespace 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 <T*> or <T*const> partial specialization with VC10 and earlier + // + template <class T> + struct remove_pointer_imp + { + typedef T type; + }; + + template <class T> + struct remove_pointer_imp<T*> + { + typedef T type; + }; + + template <class T, bool b> + struct remove_pointer_imp3 + { + typedef typename remove_pointer_imp<typename boost::remove_cv<T>::type>::type type; + }; + + template <class T> + struct remove_pointer_imp3<T, false> + { + typedef T type; + }; + + template <class T> + struct remove_pointer_imp2 + { + typedef typename remove_pointer_imp3<T, ::boost::is_pointer<T>::value>::type type; + }; +} + +BOOST_TT_AUX_TYPE_TRAIT_DEF1(remove_pointer,T,typename boost::detail::remove_pointer_imp2<T>::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) |