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)
10 #include <boost/callable_traits/add_member_lvalue_reference.hpp>
13 #ifdef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS
14 int main(){ return 0; }
22 using f
= void(foo::*)();
23 using l
= void(foo::*)() &;
24 using r
= void(foo::*)() &&;
25 using c
= void(foo::*)() const;
26 using cl
= void(foo::*)() const &;
27 using cr
= void(foo::*)() const &&;
28 using v
= void(foo::*)() volatile;
29 using vl
= void(foo::*)() volatile &;
30 using vr
= void(foo::*)() volatile &&;
31 using cv
= void(foo::*)() const volatile;
32 using cvl
= void(foo::*)() const volatile &;
33 using cvr
= void(foo::*)() const volatile &&;
35 CT_ASSERT(std::is_same
<l
, TRAIT(add_member_lvalue_reference
, f
)>{});
36 CT_ASSERT(std::is_same
<cl
, TRAIT(add_member_lvalue_reference
, c
)>{});
37 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, v
)>{});
38 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, v
)>{});
39 CT_ASSERT(std::is_same
<cvl
, TRAIT(add_member_lvalue_reference
, cv
)>{});
40 CT_ASSERT(std::is_same
<l
, TRAIT(add_member_lvalue_reference
, l
)>{});
41 CT_ASSERT(std::is_same
<cl
, TRAIT(add_member_lvalue_reference
, cl
)>{});
42 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, vl
)>{});
43 CT_ASSERT(std::is_same
<cvl
, TRAIT(add_member_lvalue_reference
, cvl
)>{});
44 CT_ASSERT(!std::is_same
<r
, TRAIT(add_member_lvalue_reference
, r
)>{});
45 CT_ASSERT(!std::is_same
<cr
, TRAIT(add_member_lvalue_reference
, cr
)>{});
46 CT_ASSERT(!std::is_same
<vr
, TRAIT(add_member_lvalue_reference
, vr
)>{});
47 CT_ASSERT(!std::is_same
<cvr
, TRAIT(add_member_lvalue_reference
, cvr
)>{});
51 using f
= void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
foo::*)(...);
52 using l
= void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
foo::*)(...) &;
53 using r
= void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
foo::*)(...) &&;
54 using c
= void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
foo::*)(...) const;
55 using cl
= void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
foo::*)(...) const &;
56 using cr
= void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
foo::*)(...) const &&;
57 using v
= void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
foo::*)(...) volatile;
58 using vl
= void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
foo::*)(...) volatile &;
59 using vr
= void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
foo::*)(...) volatile &&;
60 using cv
= void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
foo::*)(...) const volatile;
61 using cvl
= void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
foo::*)(...) const volatile &;
62 using cvr
= void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC
foo::*)(...) const volatile &&;
64 CT_ASSERT(std::is_same
<l
, TRAIT(add_member_lvalue_reference
, f
)>{});
65 CT_ASSERT(std::is_same
<cl
, TRAIT(add_member_lvalue_reference
, c
)>{});
66 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, v
)>{});
67 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, v
)>{});
68 CT_ASSERT(std::is_same
<cvl
, TRAIT(add_member_lvalue_reference
, cv
)>{});
69 CT_ASSERT(std::is_same
<l
, TRAIT(add_member_lvalue_reference
, l
)>{});
70 CT_ASSERT(std::is_same
<cl
, TRAIT(add_member_lvalue_reference
, cl
)>{});
71 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, vl
)>{});
72 CT_ASSERT(std::is_same
<cvl
, TRAIT(add_member_lvalue_reference
, cvl
)>{});
73 CT_ASSERT(!std::is_same
<r
, TRAIT(add_member_lvalue_reference
, r
)>{});
74 CT_ASSERT(!std::is_same
<cr
, TRAIT(add_member_lvalue_reference
, cr
)>{});
75 CT_ASSERT(!std::is_same
<vr
, TRAIT(add_member_lvalue_reference
, vr
)>{});
76 CT_ASSERT(!std::is_same
<cvr
, TRAIT(add_member_lvalue_reference
, cvr
)>{});
81 using l
= void(...) &;
82 using r
= void(...) &&;
83 using c
= void(...) const;
84 using cl
= void(...) const &;
85 using cr
= void(...) const &&;
86 using v
= void(...) volatile;
87 using vl
= void(...) volatile &;
88 using vr
= void(...) volatile &&;
89 using cv
= void(...) const volatile;
90 using cvl
= void(...) const volatile &;
91 using cvr
= void(...) const volatile &&;
93 CT_ASSERT(std::is_same
<l
, TRAIT(add_member_lvalue_reference
, f
)>{});
94 CT_ASSERT(std::is_same
<cl
, TRAIT(add_member_lvalue_reference
, c
)>{});
95 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, v
)>{});
96 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, v
)>{});
97 CT_ASSERT(std::is_same
<cvl
, TRAIT(add_member_lvalue_reference
, cv
)>{});
98 CT_ASSERT(std::is_same
<l
, TRAIT(add_member_lvalue_reference
, l
)>{});
99 CT_ASSERT(std::is_same
<cl
, TRAIT(add_member_lvalue_reference
, cl
)>{});
100 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, vl
)>{});
101 CT_ASSERT(std::is_same
<cvl
, TRAIT(add_member_lvalue_reference
, cvl
)>{});
102 CT_ASSERT(!std::is_same
<r
, TRAIT(add_member_lvalue_reference
, r
)>{});
103 CT_ASSERT(!std::is_same
<cr
, TRAIT(add_member_lvalue_reference
, cr
)>{});
104 CT_ASSERT(!std::is_same
<vr
, TRAIT(add_member_lvalue_reference
, vr
)>{});
105 CT_ASSERT(!std::is_same
<cvr
, TRAIT(add_member_lvalue_reference
, cvr
)>{});
108 #ifdef BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE
110 using f
= void(...) transaction_safe
;
111 using l
= void(...) & transaction_safe
;
112 using r
= void(...) && transaction_safe
;
113 using c
= void(...) const transaction_safe
;
114 using cl
= void(...) const & transaction_safe
;
115 using cr
= void(...) const && transaction_safe
;
116 using v
= void(...) volatile transaction_safe
;
117 using vl
= void(...) volatile & transaction_safe
;
118 using vr
= void(...) volatile && transaction_safe
;
119 using cv
= void(...) const volatile transaction_safe
;
120 using cvl
= void(...) const volatile & transaction_safe
;
121 using cvr
= void(...) const volatile && transaction_safe
;
123 CT_ASSERT(std::is_same
<l
, TRAIT(add_member_lvalue_reference
, f
)>{});
124 CT_ASSERT(std::is_same
<cl
, TRAIT(add_member_lvalue_reference
, c
)>{});
125 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, v
)>{});
126 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, v
)>{});
127 CT_ASSERT(std::is_same
<cvl
, TRAIT(add_member_lvalue_reference
, cv
)>{});
128 CT_ASSERT(std::is_same
<l
, TRAIT(add_member_lvalue_reference
, l
)>{});
129 CT_ASSERT(std::is_same
<cl
, TRAIT(add_member_lvalue_reference
, cl
)>{});
130 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, vl
)>{});
131 CT_ASSERT(std::is_same
<cvl
, TRAIT(add_member_lvalue_reference
, cvl
)>{});
132 CT_ASSERT(!std::is_same
<r
, TRAIT(add_member_lvalue_reference
, r
)>{});
133 CT_ASSERT(!std::is_same
<cr
, TRAIT(add_member_lvalue_reference
, cr
)>{});
134 CT_ASSERT(!std::is_same
<vr
, TRAIT(add_member_lvalue_reference
, vr
)>{});
135 CT_ASSERT(!std::is_same
<cvr
, TRAIT(add_member_lvalue_reference
, cvr
)>{});
138 #endif // #ifdef BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE
140 #ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
142 using f
= void(...) noexcept
;
143 using l
= void(...) & noexcept
;
144 using r
= void(...) && noexcept
;
145 using c
= void(...) const noexcept
;
146 using cl
= void(...) const & noexcept
;
147 using cr
= void(...) const && noexcept
;
148 using v
= void(...) volatile noexcept
;
149 using vl
= void(...) volatile & noexcept
;
150 using vr
= void(...) volatile && noexcept
;
151 using cv
= void(...) const volatile noexcept
;
152 using cvl
= void(...) const volatile & noexcept
;
153 using cvr
= void(...) const volatile && noexcept
;
155 CT_ASSERT(std::is_same
<l
, TRAIT(add_member_lvalue_reference
, f
)>{});
156 CT_ASSERT(std::is_same
<cl
, TRAIT(add_member_lvalue_reference
, c
)>{});
157 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, v
)>{});
158 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, v
)>{});
159 CT_ASSERT(std::is_same
<cvl
, TRAIT(add_member_lvalue_reference
, cv
)>{});
160 CT_ASSERT(std::is_same
<l
, TRAIT(add_member_lvalue_reference
, l
)>{});
161 CT_ASSERT(std::is_same
<cl
, TRAIT(add_member_lvalue_reference
, cl
)>{});
162 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, vl
)>{});
163 CT_ASSERT(std::is_same
<cvl
, TRAIT(add_member_lvalue_reference
, cvl
)>{});
164 CT_ASSERT(!std::is_same
<r
, TRAIT(add_member_lvalue_reference
, r
)>{});
165 CT_ASSERT(!std::is_same
<cr
, TRAIT(add_member_lvalue_reference
, cr
)>{});
166 CT_ASSERT(!std::is_same
<vr
, TRAIT(add_member_lvalue_reference
, vr
)>{});
167 CT_ASSERT(!std::is_same
<cvr
, TRAIT(add_member_lvalue_reference
, cvr
)>{});
169 #endif // #ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
171 #ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
172 #ifdef BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE
174 using f
= void(...) transaction_safe noexcept
;
175 using l
= void(...) & transaction_safe noexcept
;
176 using r
= void(...) && transaction_safe noexcept
;
177 using c
= void(...) const transaction_safe noexcept
;
178 using cl
= void(...) const & transaction_safe noexcept
;
179 using cr
= void(...) const && transaction_safe noexcept
;
180 using v
= void(...) volatile transaction_safe noexcept
;
181 using vl
= void(...) volatile & transaction_safe noexcept
;
182 using vr
= void(...) volatile && transaction_safe noexcept
;
183 using cv
= void(...) const volatile transaction_safe noexcept
;
184 using cvl
= void(...) const volatile & transaction_safe noexcept
;
185 using cvr
= void(...) const volatile && transaction_safe noexcept
;
187 CT_ASSERT(std::is_same
<l
, TRAIT(add_member_lvalue_reference
, f
)>{});
188 CT_ASSERT(std::is_same
<cl
, TRAIT(add_member_lvalue_reference
, c
)>{});
189 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, v
)>{});
190 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, v
)>{});
191 CT_ASSERT(std::is_same
<cvl
, TRAIT(add_member_lvalue_reference
, cv
)>{});
192 CT_ASSERT(std::is_same
<l
, TRAIT(add_member_lvalue_reference
, l
)>{});
193 CT_ASSERT(std::is_same
<cl
, TRAIT(add_member_lvalue_reference
, cl
)>{});
194 CT_ASSERT(std::is_same
<vl
, TRAIT(add_member_lvalue_reference
, vl
)>{});
195 CT_ASSERT(std::is_same
<cvl
, TRAIT(add_member_lvalue_reference
, cvl
)>{});
196 CT_ASSERT(!std::is_same
<r
, TRAIT(add_member_lvalue_reference
, r
)>{});
197 CT_ASSERT(!std::is_same
<cr
, TRAIT(add_member_lvalue_reference
, cr
)>{});
198 CT_ASSERT(!std::is_same
<vr
, TRAIT(add_member_lvalue_reference
, vr
)>{});
199 CT_ASSERT(!std::is_same
<cvr
, TRAIT(add_member_lvalue_reference
, cvr
)>{});
201 #endif // #ifdef BOOST_CLBL_TRTS_ENABLE_TRANSACTION_SAFE
202 #endif // #ifdef BOOST_CLBL_TRTS_ENABLE_NOEXCEPT_TYPES
205 #endif //#ifdef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS