diff options
Diffstat (limited to 'src/third_party/boost-1.56.0/boost/type_traits/detail/cv_traits_impl.hpp')
-rw-r--r-- | src/third_party/boost-1.56.0/boost/type_traits/detail/cv_traits_impl.hpp | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/src/third_party/boost-1.56.0/boost/type_traits/detail/cv_traits_impl.hpp b/src/third_party/boost-1.56.0/boost/type_traits/detail/cv_traits_impl.hpp new file mode 100644 index 00000000000..8e995bb0642 --- /dev/null +++ b/src/third_party/boost-1.56.0/boost/type_traits/detail/cv_traits_impl.hpp @@ -0,0 +1,140 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard +// Hinnant & John Maddock 2000. +// Use, modification and distribution are subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt). +// +// See http://www.boost.org/libs/type_traits for most recent version including documentation. + + +#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> + + +// implementation helper: + + +namespace boost { +namespace detail { + +#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> +struct cv_traits_imp<T*> +{ + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type; +}; +#endif + +template <typename 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); + typedef T unqualified_type; +}; + +template <typename 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); + typedef T unqualified_type; +}; + +template <typename 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; +}; + +} // namespace detail +} // namespace boost + + +#endif // BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED |