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_const 13 #include <type_traits> 14 #include <boost/callable_traits/add_member_const.hpp> 15 16 namespace ct = boost::callable_traits; 17 18 struct foo {}; 19 main()20int main() { 21 22 { 23 using pmf = int(foo::*)(); 24 using expect = int(foo::*)() const; 25 using test = ct::add_member_const_t<pmf>; 26 static_assert(std::is_same<test, expect>::value, ""); 27 } { 28 // add_member_const_t doesn't change anything when 29 // the function type is already const. 30 using pmf = int(foo::*)() const &&; 31 using expect = int(foo::*)() const &&; 32 using test = ct::add_member_const_t<pmf>; 33 static_assert(std::is_same<test, expect>::value, ""); 34 } { 35 using pmf = int(foo::*)() volatile &; 36 using expect = int(foo::*)() const volatile &; 37 using test = ct::add_member_const_t<pmf>; 38 static_assert(std::is_same<test, expect>::value, ""); 39 } { 40 // add_member_const_t can also be used with "abominable" 41 // function types. 42 using f = int(); 43 using expect = int() const; 44 using test = ct::add_member_const_t<f>; 45 static_assert(std::is_same<test, expect>::value, ""); 46 } 47 } 48 //] 49 #endif //#ifdef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS 50