1 /*<- 2 Copyright Barrett Adair 2016-2017 3 Distributed under the Boost Software License, Version 1.0. 4 (See accompanying file LICENSE.md or copy at http ://boost.org/LICENSE_1_0.txt) 5 ->*/ 6 7 #include <boost/callable_traits/detail/config.hpp> 8 #ifdef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS main()9int main(){ return 0; } 10 #else 11 12 //[ add_member_cv 13 #include <type_traits> 14 #include <boost/callable_traits/add_member_cv.hpp> 15 16 namespace ct = boost::callable_traits; 17 18 struct foo {}; 19 main()20int main() { 21 22 { 23 using pmf = void(foo::*)(); 24 using expect = void(foo::*)() const volatile; 25 using test = ct::add_member_cv_t<pmf>; 26 static_assert(std::is_same<test, expect>::value, ""); 27 } { 28 // add_member_cv_t doesn't change anything when 29 // the function type is already cv-qualified. 30 using pmf = void(foo::*)() const volatile &&; 31 using expect = void(foo::*)() const volatile &&; 32 using test = ct::add_member_cv_t<pmf>; 33 static_assert(std::is_same<test, expect>::value, ""); 34 } { 35 using pmf = void(foo::*)() volatile &; 36 using expect = void(foo::*)() const volatile &; 37 using test = ct::add_member_cv_t<pmf>; 38 static_assert(std::is_same<test, expect>::value, ""); 39 } { 40 // add_member_cv_t can also be used with "abominable" 41 // function types. 42 using f = void(); 43 using expect = void() const volatile; 44 using test = ct::add_member_cv_t<f>; 45 static_assert(std::is_same<test, expect>::value, ""); 46 } 47 } 48 //] 49 #endif //#ifdef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS 50