Index: boost/type_traits/detail/cv_traits_impl.hpp =================================================================== --- boost/type_traits/detail/cv_traits_impl.hpp (revision 80698) +++ boost/type_traits/detail/cv_traits_impl.hpp (working copy) @@ -11,6 +11,7 @@ #ifndef BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED #define BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED +#include #include #include @@ -29,6 +30,82 @@ namespace gcc8503 { #endif +#if BOOST_WORKAROUND(BOOST_MSVC, == 1700) +#define BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(X) X +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type; +}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type[]; +}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = true); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type[]; +}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = true); + typedef T unqualified_type[]; +}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = true); + BOOST_STATIC_CONSTANT(bool, is_volatile = true); + typedef T unqualified_type[]; +}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type[N]; +}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = true); + BOOST_STATIC_CONSTANT(bool, is_volatile = false); + typedef T unqualified_type[N]; +}; + +template +struct cv_traits_imp +{ + BOOST_STATIC_CONSTANT(bool, is_const = false); + BOOST_STATIC_CONSTANT(bool, is_volatile = true); + typedef T unqualified_type[N]; +}; + +template +struct cv_traits_imp +{ + 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 struct cv_traits_imp {}; template @@ -38,9 +115,10 @@ BOOST_STATIC_CONSTANT(bool, is_volatile = false); typedef T unqualified_type; }; +#endif template -struct cv_traits_imp +struct cv_traits_imp { BOOST_STATIC_CONSTANT(bool, is_const = true); BOOST_STATIC_CONSTANT(bool, is_volatile = false); @@ -48,7 +126,7 @@ }; template -struct cv_traits_imp +struct cv_traits_imp { BOOST_STATIC_CONSTANT(bool, is_const = false); BOOST_STATIC_CONSTANT(bool, is_volatile = true); @@ -56,7 +134,7 @@ }; template -struct cv_traits_imp +struct cv_traits_imp { BOOST_STATIC_CONSTANT(bool, is_const = true); BOOST_STATIC_CONSTANT(bool, is_volatile = true); Index: boost/type_traits/is_const.hpp =================================================================== --- boost/type_traits/is_const.hpp (revision 80698) +++ boost/type_traits/is_const.hpp (working copy) @@ -61,7 +61,7 @@ #if BOOST_WORKAROUND(BOOST_MSVC, < 1400) BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp::type*>::is_const); #else - BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp::is_const); + BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp::is_const); #endif }; #ifndef BOOST_NO_RVALUE_REFERENCES Index: boost/type_traits/is_volatile.hpp =================================================================== --- boost/type_traits/is_volatile.hpp (revision 80698) +++ boost/type_traits/is_volatile.hpp (working copy) @@ -48,7 +48,7 @@ #if BOOST_WORKAROUND(BOOST_MSVC, < 1400) BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp::type*>::is_volatile); #else - BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp::is_volatile); + BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp::is_volatile); #endif }; #ifndef BOOST_NO_RVALUE_REFERENCES Index: boost/type_traits/remove_const.hpp =================================================================== --- boost/type_traits/remove_const.hpp (revision 80698) +++ boost/type_traits/remove_const.hpp (working copy) @@ -49,7 +49,7 @@ struct remove_const_impl { typedef typename remove_const_helper< - typename cv_traits_imp::unqualified_type + typename cv_traits_imp::unqualified_type , ::boost::is_volatile::value >::type type; }; Index: boost/type_traits/remove_cv.hpp =================================================================== --- boost/type_traits/remove_cv.hpp (revision 80698) +++ boost/type_traits/remove_cv.hpp (working copy) @@ -34,7 +34,7 @@ template struct rvalue_ref_filter_rem_cv { - typedef typename boost::detail::cv_traits_imp::unqualified_type type; + typedef typename boost::detail::cv_traits_imp::unqualified_type type; }; #ifndef BOOST_NO_RVALUE_REFERENCES Index: boost/type_traits/remove_volatile.hpp =================================================================== --- boost/type_traits/remove_volatile.hpp (revision 80698) +++ boost/type_traits/remove_volatile.hpp (working copy) @@ -48,7 +48,7 @@ struct remove_volatile_impl { typedef typename remove_volatile_helper< - typename cv_traits_imp::unqualified_type + typename cv_traits_imp::unqualified_type , ::boost::is_const::value >::type type; };