• 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_lvalue_reference
13 #include <type_traits>
14 #include <boost/callable_traits/add_member_lvalue_reference.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::*)() &;
25         using test = ct::add_member_lvalue_reference_t<pmf>;
26         static_assert(std::is_same<test, expect>::value, "");
27     } {
28         // add_member_lvalue_reference_t doesn't change anything when
29         // the function type already has an lvalue qualifier.
30         using pmf = void(foo::*)() &;
31         using expect = void(foo::*)() &;
32         using test = ct::add_member_lvalue_reference_t<pmf>;
33         static_assert(std::is_same<test, expect>::value, "");
34     } {
35         // add_member_lvalue_reference_t models C++11 reference collapsing
36         // rules, so that adding an lvalue qualifier to an
37         // rvalue-qualified type will force the lvalue.
38         using pmf = void(foo::*)() &&;
39         using expect = void(foo::*)() &;
40         using test = ct::add_member_lvalue_reference_t<pmf>;
41         static_assert(std::is_same<test, expect>::value, "");
42     } {
43         // add_member_lvalue_reference_t can also be used to create "abominable"
44         // function types.
45         using f = void();
46         using expect = void() &;
47         using test = ct::add_member_lvalue_reference_t<f>;
48         static_assert(std::is_same<test, expect>::value, "");
49     }
50 }
51 
52 //]
53 #endif //#ifdef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS
54