]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/thread/test/functional/invoke/invoke_lvalue_pass.cpp
1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // Copyright (C) 2014 Vicente J. Botet Escriba
12 // Distributed under the Boost Software License, Version 1.0. (See accompanying
13 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
16 // <boost/thread/detail/invoke.hpp>
18 #include <boost/thread/detail/invoke.hpp>
19 #include <boost/detail/lightweight_test.hpp>
32 void operator()(int i
)
37 void mem1() {++count
;}
38 void mem2() const {count
+= 2;}
44 int save_count
= count
;
46 #if defined BOOST_THREAD_PROVIDES_INVOKE
49 boost::detail::invoke(f_void_1
, i
);
50 BOOST_TEST(count
== save_count
+ 2);
56 boost::detail::invoke
<void>(f_void_1
, i
);
57 BOOST_TEST(count
== save_count
+ 2);
61 #if defined BOOST_THREAD_PROVIDES_INVOKE
63 void (*fp
)(int) = f_void_1
;
65 boost::detail::invoke(fp
, i
);
66 BOOST_TEST(count
== save_count
+3);
71 void (*fp
)(int) = f_void_1
;
73 boost::detail::invoke
<void>(fp
, i
);
74 BOOST_TEST(count
== save_count
+3);
77 #if defined BOOST_THREAD_PROVIDES_INVOKE
79 void (*fp
)(int) = f_void_1
;
81 boost::detail::invoke(fp
, i
);
82 BOOST_TEST(count
== save_count
+3);
87 void (*fp
)(int) = f_void_1
;
89 boost::detail::invoke
<void>(fp
, i
);
90 BOOST_TEST(count
== save_count
+3);
94 #if defined BOOST_THREAD_PROVIDES_INVOKE
98 boost::detail::invoke(a0
, i
);
99 BOOST_TEST(count
== save_count
+4);
106 boost::detail::invoke
<void>(a0
, i
);
107 BOOST_TEST(count
== save_count
+4);
110 // member function pointer
111 #if defined BOOST_THREAD_PROVIDES_INVOKE
113 void (A_void_1::*fp
)() = &A_void_1::mem1
;
115 boost::detail::invoke(fp
, a
);
116 BOOST_TEST(count
== save_count
+1);
119 boost::detail::invoke(fp
, ap
);
120 BOOST_TEST(count
== save_count
+1);
125 void (A_void_1::*fp
)() = &A_void_1::mem1
;
127 boost::detail::invoke
<void>(fp
, a
);
128 BOOST_TEST(count
== save_count
+1);
131 boost::detail::invoke
<void>(fp
, ap
);
132 BOOST_TEST(count
== save_count
+1);
135 // const member function pointer
136 #if defined BOOST_THREAD_PROVIDES_INVOKE
138 void (A_void_1::*fp
)() const = &A_void_1::mem2
;
140 boost::detail::invoke(fp
, a
);
141 BOOST_TEST(count
== save_count
+2);
144 boost::detail::invoke(fp
, ap
);
145 BOOST_TEST(count
== save_count
+2);
150 void (A_void_1::*fp
)() const = &A_void_1::mem2
;
152 boost::detail::invoke
<void>(fp
, a
);
153 BOOST_TEST(count
== save_count
+2);
156 boost::detail::invoke
<void>(fp
, ap
);
157 BOOST_TEST(count
== save_count
+2);
171 A_int_1() : data_(5) {}
172 int operator()(int i
)
177 int mem1() {return 3;}
178 int mem2() const {return 4;}
188 #if defined BOOST_THREAD_PROVIDES_INVOKE
189 BOOST_TEST(boost::detail::invoke(f_int_1
, i
) == 3);
191 BOOST_TEST(boost::detail::invoke
<int>(f_int_1
, i
) == 3);
195 int (*fp
)(int) = f_int_1
;
197 #if defined BOOST_THREAD_PROVIDES_INVOKE
198 BOOST_TEST(boost::detail::invoke(fp
, i
) == 4);
200 BOOST_TEST(boost::detail::invoke
<int>(fp
, i
) == 4);
205 #if defined BOOST_THREAD_PROVIDES_INVOKE
206 BOOST_TEST(boost::detail::invoke(A_int_1(), i
) == 3);
210 BOOST_TEST(boost::detail::invoke
<int>(a
, i
) == 3);
211 //BOOST_TEST(boost::detail::invoke<int>(ca, i) == 3);
212 #if defined BOOST_THREAD_PROVIDES_INVOKE
213 BOOST_TEST(boost::detail::invoke
<int>(A_int_1(), i
) == 3);
216 // member function pointer
219 #if defined BOOST_THREAD_PROVIDES_INVOKE
220 BOOST_TEST(boost::detail::invoke(&A_int_1::mem1
, a
) == 3);
222 BOOST_TEST(boost::detail::invoke
<int>(&A_int_1::mem1
, a
) == 3);
224 #if defined BOOST_THREAD_PROVIDES_INVOKE
225 BOOST_TEST(boost::detail::invoke(&A_int_1::mem1
, ap
) == 3);
227 BOOST_TEST(boost::detail::invoke
<int>(&A_int_1::mem1
, ap
) == 3);
229 // const member function pointer
232 #if defined BOOST_THREAD_PROVIDES_INVOKE
233 BOOST_TEST(boost::detail::invoke(&A_int_1::mem2
, A_int_1()) == 4);
235 BOOST_TEST(boost::detail::invoke
<int>(&A_int_1::mem2
, A_int_1()) == 4);
237 #if defined BOOST_THREAD_PROVIDES_INVOKE
238 BOOST_TEST(boost::detail::invoke(&A_int_1::mem2
, ap
) == 4);
240 BOOST_TEST(boost::detail::invoke
<int>(&A_int_1::mem2
, ap
) == 4);
242 // member data pointer
245 #if defined BOOST_THREAD_PROVIDES_INVOKE
246 BOOST_TEST(boost::detail::invoke(&A_int_1::data_
, a
) == 5);
248 BOOST_TEST(boost::detail::invoke
<int>(&A_int_1::data_
, a
) == 5);
251 #if defined BOOST_THREAD_PROVIDES_INVOKE
254 boost::detail::invoke(&A_int_1::data_
, a
) = 6;
255 BOOST_TEST(boost::detail::invoke(&A_int_1::data_
, a
) == 6);
257 boost::detail::invoke
<int>(&A_int_1::data_
, a
) = 6;
258 BOOST_TEST(boost::detail::invoke
<int>(&A_int_1::data_
, a
) == 6);
262 #if defined BOOST_THREAD_PROVIDES_INVOKE
263 BOOST_TEST(boost::detail::invoke(&A_int_1::data_
, ap
) == 6);
264 boost::detail::invoke(&A_int_1::data_
, ap
) = 7;
265 BOOST_TEST(boost::detail::invoke(&A_int_1::data_
, ap
) == 7);
267 BOOST_TEST(boost::detail::invoke
<int>(&A_int_1::data_
, ap
) == 7);
268 boost::detail::invoke
<int>(&A_int_1::data_
, ap
) = 8;
269 BOOST_TEST(boost::detail::invoke
<int>(&A_int_1::data_
, ap
) == 8);
275 // 2 arg, return void
277 void f_void_2(int i
, int j
)
284 void operator()(int i
, int j
)
289 void mem1(int i
) {count
+= i
;}
290 void mem2(int i
) const {count
+= i
;}
296 int save_count
= count
;
301 #if defined BOOST_THREAD_PROVIDES_INVOKE
302 boost::detail::invoke(f_void_2
, i
, j
);
303 BOOST_TEST(count
== save_count
+5);
306 boost::detail::invoke
<void>(f_void_2
, i
, j
);
307 BOOST_TEST(count
== save_count
+5);
310 // member function pointer
312 #if defined BOOST_THREAD_PROVIDES_INVOKE
314 boost::detail::invoke(&A_void_2::mem1
, A_void_2(), j
);
315 BOOST_TEST(count
== save_count
+3);
318 boost::detail::invoke
<void>(&A_void_2::mem1
, A_void_2(), j
);
319 BOOST_TEST(count
== save_count
+3);
323 // boost::detail::invoke<void>(&A_void_2::mem1, a2, j);
324 // BOOST_TEST(count == save_count+3);
325 // save_count = count;
334 return boost::report_errors();