1 #ifndef BOOST_TYPE_TRAITS_COPY_CV_HPP_INCLUDED 2 #define BOOST_TYPE_TRAITS_COPY_CV_HPP_INCLUDED 3 4 // 5 // Copyright 2015 Peter Dimov 6 // 7 // Distributed under the Boost Software License, Version 1.0. 8 // See accompanying file LICENSE_1_0.txt or copy at 9 // http://www.boost.org/LICENSE_1_0.txt 10 // 11 12 #include <boost/type_traits/is_const.hpp> 13 #include <boost/type_traits/is_volatile.hpp> 14 #include <boost/type_traits/add_const.hpp> 15 #include <boost/type_traits/add_volatile.hpp> 16 #include <boost/type_traits/conditional.hpp> 17 18 namespace boost 19 { 20 21 template<class T, class U> struct copy_cv 22 { 23 private: 24 25 typedef typename boost::conditional<boost::is_const<U>::value, typename boost::add_const<T>::type, T>::type CT; 26 27 public: 28 29 typedef typename boost::conditional<boost::is_volatile<U>::value, typename boost::add_volatile<CT>::type, CT>::type type; 30 }; 31 32 #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) 33 34 template <class T, class U> using copy_cv_t = typename copy_cv<T, U>::type; 35 36 #endif 37 38 } // namespace boost 39 40 #endif // #ifndef BOOST_TYPE_TRAITS_COPY_CV_HPP_INCLUDED 41