Ticket #7317: cv_traits_imp.patch
File cv_traits_imp.patch, 6.3 KB (added by , 10 years ago) |
---|
-
boost/type_traits/detail/cv_traits_impl.hpp
11 11 #ifndef BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED 12 12 #define BOOST_TT_DETAIL_CV_TRAITS_IMPL_HPP_INCLUDED 13 13 14 #include <cstddef> 14 15 #include <boost/config.hpp> 15 16 #include <boost/detail/workaround.hpp> 16 17 … … 29 30 namespace gcc8503 { 30 31 #endif 31 32 33 #if BOOST_WORKAROUND(BOOST_MSVC, == 1700) 34 #define BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(X) X 35 template <typename T> 36 struct cv_traits_imp 37 { 38 BOOST_STATIC_CONSTANT(bool, is_const = false); 39 BOOST_STATIC_CONSTANT(bool, is_volatile = false); 40 typedef T unqualified_type; 41 }; 42 43 template <typename T> 44 struct cv_traits_imp<T[]> 45 { 46 BOOST_STATIC_CONSTANT(bool, is_const = false); 47 BOOST_STATIC_CONSTANT(bool, is_volatile = false); 48 typedef T unqualified_type[]; 49 }; 50 51 template <typename T> 52 struct cv_traits_imp<const T[]> 53 { 54 BOOST_STATIC_CONSTANT(bool, is_const = true); 55 BOOST_STATIC_CONSTANT(bool, is_volatile = false); 56 typedef T unqualified_type[]; 57 }; 58 59 template <typename T> 60 struct cv_traits_imp<volatile T[]> 61 { 62 BOOST_STATIC_CONSTANT(bool, is_const = false); 63 BOOST_STATIC_CONSTANT(bool, is_volatile = true); 64 typedef T unqualified_type[]; 65 }; 66 67 template <typename T> 68 struct cv_traits_imp<const volatile T[]> 69 { 70 BOOST_STATIC_CONSTANT(bool, is_const = true); 71 BOOST_STATIC_CONSTANT(bool, is_volatile = true); 72 typedef T unqualified_type[]; 73 }; 74 75 template <typename T, std::size_t N> 76 struct cv_traits_imp<T[N]> 77 { 78 BOOST_STATIC_CONSTANT(bool, is_const = false); 79 BOOST_STATIC_CONSTANT(bool, is_volatile = false); 80 typedef T unqualified_type[N]; 81 }; 82 83 template <typename T, std::size_t N> 84 struct cv_traits_imp<const T[N]> 85 { 86 BOOST_STATIC_CONSTANT(bool, is_const = true); 87 BOOST_STATIC_CONSTANT(bool, is_volatile = false); 88 typedef T unqualified_type[N]; 89 }; 90 91 template <typename T, std::size_t N> 92 struct cv_traits_imp<volatile T[N]> 93 { 94 BOOST_STATIC_CONSTANT(bool, is_const = false); 95 BOOST_STATIC_CONSTANT(bool, is_volatile = true); 96 typedef T unqualified_type[N]; 97 }; 98 99 template <typename T, std::size_t N> 100 struct cv_traits_imp<const volatile T[N]> 101 { 102 BOOST_STATIC_CONSTANT(bool, is_const = true); 103 BOOST_STATIC_CONSTANT(bool, is_volatile = true); 104 typedef T unqualified_type[N]; 105 }; 106 107 #else 108 #define BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(X) X * 32 109 template <typename T> struct cv_traits_imp {}; 33 110 34 111 template <typename T> … … 38 115 BOOST_STATIC_CONSTANT(bool, is_volatile = false); 39 116 typedef T unqualified_type; 40 117 }; 118 #endif 41 119 42 120 template <typename T> 43 struct cv_traits_imp< const T*>121 struct cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(const T)> 44 122 { 45 123 BOOST_STATIC_CONSTANT(bool, is_const = true); 46 124 BOOST_STATIC_CONSTANT(bool, is_volatile = false); … … 48 126 }; 49 127 50 128 template <typename T> 51 struct cv_traits_imp< volatile T*>129 struct cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(volatile T)> 52 130 { 53 131 BOOST_STATIC_CONSTANT(bool, is_const = false); 54 132 BOOST_STATIC_CONSTANT(bool, is_volatile = true); … … 56 134 }; 57 135 58 136 template <typename T> 59 struct cv_traits_imp< const volatile T*>137 struct cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(const volatile T)> 60 138 { 61 139 BOOST_STATIC_CONSTANT(bool, is_const = true); 62 140 BOOST_STATIC_CONSTANT(bool, is_volatile = true); -
boost/type_traits/is_const.hpp
61 61 #if BOOST_WORKAROUND(BOOST_MSVC, < 1400) 62 62 BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<typename boost::remove_bounds<T>::type*>::is_const); 63 63 #else 64 BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp< T*>::is_const);64 BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::is_const); 65 65 #endif 66 66 }; 67 67 #ifndef BOOST_NO_RVALUE_REFERENCES -
boost/type_traits/is_volatile.hpp
48 48 #if BOOST_WORKAROUND(BOOST_MSVC, < 1400) 49 49 BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<typename boost::remove_bounds<T>::type*>::is_volatile); 50 50 #else 51 BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp< T*>::is_volatile);51 BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::is_volatile); 52 52 #endif 53 53 }; 54 54 #ifndef BOOST_NO_RVALUE_REFERENCES -
boost/type_traits/remove_const.hpp
49 49 struct remove_const_impl 50 50 { 51 51 typedef typename remove_const_helper< 52 typename cv_traits_imp< T*>::unqualified_type52 typename cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::unqualified_type 53 53 , ::boost::is_volatile<T>::value 54 54 >::type type; 55 55 }; -
boost/type_traits/remove_cv.hpp
34 34 template <class T> 35 35 struct rvalue_ref_filter_rem_cv 36 36 { 37 typedef typename boost::detail::cv_traits_imp< T*>::unqualified_type type;37 typedef typename boost::detail::cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::unqualified_type type; 38 38 }; 39 39 40 40 #ifndef BOOST_NO_RVALUE_REFERENCES -
boost/type_traits/remove_volatile.hpp
48 48 struct remove_volatile_impl 49 49 { 50 50 typedef typename remove_volatile_helper< 51 typename cv_traits_imp< T*>::unqualified_type51 typename cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::unqualified_type 52 52 , ::boost::is_const<T>::value 53 53 >::type type; 54 54 };