diff options
Diffstat (limited to 'boost/type_traits/is_const.hpp')
-rw-r--r-- | boost/type_traits/is_const.hpp | 60 |
1 files changed, 8 insertions, 52 deletions
diff --git a/boost/type_traits/is_const.hpp b/boost/type_traits/is_const.hpp index e3e62b697c..d9dd2aa326 100644 --- a/boost/type_traits/is_const.hpp +++ b/boost/type_traits/is_const.hpp @@ -21,70 +21,26 @@ #ifndef BOOST_TT_IS_CONST_HPP_INCLUDED #define BOOST_TT_IS_CONST_HPP_INCLUDED -#include <boost/config.hpp> -#include <boost/detail/workaround.hpp> - -# include <boost/type_traits/detail/cv_traits_impl.hpp> -# ifdef __GNUC__ -# include <boost/type_traits/is_reference.hpp> -# endif -# if BOOST_WORKAROUND(BOOST_MSVC, < 1400) -# include <boost/type_traits/remove_bounds.hpp> -# endif - -// should be the last #include -#include <boost/type_traits/detail/bool_trait_def.hpp> +#include <boost/type_traits/integral_constant.hpp> namespace boost { #if defined( __CODEGEARC__ ) -BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,__is_const(T)) + template <class T> + struct is_const : public integral_constant<bool, __is_const(T)> {}; #else -namespace detail{ -// -// We can't filter out rvalue_references at the same level as -// references or we get ambiguities from msvc: -// -template <class T> -struct is_const_rvalue_filter -{ -#if BOOST_WORKAROUND(BOOST_MSVC, < 1400) - BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<typename boost::remove_bounds<T>::type*>::is_const); -#else - BOOST_STATIC_CONSTANT(bool, value = ::boost::detail::cv_traits_imp<BOOST_TT_AUX_CV_TRAITS_IMPL_PARAM(T)>::is_const); -#endif -}; -#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES -template <class T> -struct is_const_rvalue_filter<T&&> -{ - BOOST_STATIC_CONSTANT(bool, value = false); -}; -#endif -} - -//* is a type T declared const - is_const<T> -BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_const,T,::boost::detail::is_const_rvalue_filter<T>::value) -BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T&,false) - -#if defined(BOOST_ILLEGAL_CV_REFERENCES) -// these are illegal specialisations; cv-qualifies applied to -// references have no effect according to [8.3.2p1], -// C++ Builder requires them though as it treats cv-qualified -// references as distinct types... -BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& const,false) -BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& volatile,false) -BOOST_TT_AUX_BOOL_TRAIT_PARTIAL_SPEC1_1(typename T,is_const,T& const volatile,false) -#endif + template <class T> + struct is_const : public false_type {}; + template <class T> struct is_const<T const> : public true_type{}; + template <class T, size_t N> struct is_const<T const[N]> : public true_type{}; + template <class T> struct is_const<T const[]> : public true_type{}; #endif } // namespace boost -#include <boost/type_traits/detail/bool_trait_undef.hpp> - #endif // BOOST_TT_IS_CONST_HPP_INCLUDED |