• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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()9 int 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()20 int 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