diff options
Diffstat (limited to '3rdParty/Boost/src/boost/type_traits/detail/cv_traits_impl.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/type_traits/detail/cv_traits_impl.hpp | 119 |
1 files changed, 81 insertions, 38 deletions
diff --git a/3rdParty/Boost/src/boost/type_traits/detail/cv_traits_impl.hpp b/3rdParty/Boost/src/boost/type_traits/detail/cv_traits_impl.hpp index ed20c9d..8e995bb 100644 --- a/3rdParty/Boost/src/boost/type_traits/detail/cv_traits_impl.hpp +++ b/3rdParty/Boost/src/boost/type_traits/detail/cv_traits_impl.hpp @@ -11,24 +11,93 @@ #ifndef BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED #define BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED +#include <cstddef> #include <boost/config.hpp> #include <boost/detail/workaround.hpp> -#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // implementation helper: -#if !(BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2)) namespace boost { namespace detail { -#else -#include <boost/type_traits/detail/yes_no_type.hpp> -namespace boost { -namespace type_traits { -namespace gcc8503 { -#endif +#if BOOST_WORKAROUND(BOOST_MSVC, == 1700) +#define BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(X) X + template <typename T> + struct cv_traits_imp + { + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type; + }; + + template <typename T> + struct cv_traits_imp<T[]> + { + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type[]; + }; + + template <typename T> + struct cv_traits_imp<const T[]> + { + BOOST_STATIC_CONSTANT(bool, is_const = true); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type[]; + }; + + template <typename T> + struct cv_traits_imp<volatile T[]> + { + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = true); + typedef T unqualified_type[]; + }; + + template <typename T> + struct cv_traits_imp<const volatile T[]> + { + BOOST_STATIC_CONSTANT(bool, is_const = true); + BOOST_STATIC_CONSTANT(bool, is_volatile = true); + typedef T unqualified_type[]; + }; + + template <typename T, std::size_t N> + struct cv_traits_imp<T[N]> + { + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type[N]; + }; + + template <typename T, std::size_t N> + struct cv_traits_imp<const T[N]> + { + BOOST_STATIC_CONSTANT(bool, is_const = true); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type[N]; + }; + + template <typename T, std::size_t N> + struct cv_traits_imp<volatile T[N]> + { + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = true); + typedef T unqualified_type[N]; + }; + + template <typename T, std::size_t N> + struct cv_traits_imp<const volatile T[N]> + { + BOOST_STATIC_CONSTANT(bool, is_const = true); + BOOST_STATIC_CONSTANT(bool, is_volatile = true); + typedef T unqualified_type[N]; + }; + +#else +#define BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(X) X * template <typename T> struct cv_traits_imp {}; template <typename T> @@ -38,9 +107,10 @@ struct cv_traits_imp<T*> BOOST_STATIC_CONSTANT(bool, is_volatile = false); typedef T unqualified_type; }; +#endif template <typename T> -struct cv_traits_imp<const T*> +struct cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(const T)> { BOOST_STATIC_CONSTANT(bool, is_const = true); BOOST_STATIC_CONSTANT(bool, is_volatile = false); @@ -48,7 +118,7 @@ struct cv_traits_imp<const T*> }; template <typename T> -struct cv_traits_imp<volatile T*> +struct cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(volatile T)> { BOOST_STATIC_CONSTANT(bool, is_const = false); BOOST_STATIC_CONSTANT(bool, is_volatile = true); @@ -56,42 +126,15 @@ struct cv_traits_imp<volatile T*> }; template <typename T> -struct cv_traits_imp<const volatile T*> +struct cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(const volatile T)> { BOOST_STATIC_CONSTANT(bool, is_const = true); BOOST_STATIC_CONSTANT(bool, is_volatile = true); typedef T unqualified_type; }; -#if BOOST_WORKAROUND(__GNUC__,== 3) && BOOST_WORKAROUND(__GNUC_MINOR__, <= 2) -// We have to exclude function pointers -// (see http://gcc.gnu.org/bugzilla/show_bug.cgi?8503) -yes_type mini_funcptr_tester(...); -no_type mini_funcptr_tester(const volatile void*); - -} // namespace gcc8503 -} // namespace type_traits - -namespace detail { - -// Use the implementation above for non function pointers -template <typename T, unsigned Select - = (unsigned)sizeof(::boost::type_traits::gcc8503::mini_funcptr_tester((T)0)) > -struct cv_traits_imp : public ::boost::type_traits::gcc8503::cv_traits_imp<T> { }; - -// Functions are never cv-qualified -template <typename T> struct cv_traits_imp<T*,1> -{ - BOOST_STATIC_CONSTANT(bool, is_const = false); - BOOST_STATIC_CONSTANT(bool, is_volatile = false); - typedef T unqualified_type; -}; - -#endif - } // namespace detail } // namespace boost -#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION #endif // BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED |