]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/asio/test/execution/set_value.cpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / libs / asio / test / execution / set_value.cpp
1 //
2 // set_value.cpp
3 // ~~~~~~~~~~~~~
4 //
5 // Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)
6 //
7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 //
10
11 // Disable autolinking for unit tests.
12 #if !defined(BOOST_ALL_NO_LIB)
13 #define BOOST_ALL_NO_LIB 1
14 #endif // !defined(BOOST_ALL_NO_LIB)
15
16 // Test that header file is self-contained.
17 #include <boost/asio/execution/set_value.hpp>
18
19 #include <string>
20 #include "../unit_test.hpp"
21
22 namespace exec = boost::asio::execution;
23
24 static int call_count = 0;
25
26 struct no_set_value
27 {
28 };
29
30 struct const_member_set_value_0
31 {
32 void set_value() const
33 {
34 ++call_count;
35 }
36 };
37
38 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
39
40 namespace boost {
41 namespace asio {
42 namespace traits {
43
44 template <>
45 struct set_value_member<const const_member_set_value_0, void()>
46 {
47 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
48 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
49 typedef void result_type;
50 };
51
52 } // namespace traits
53 } // namespace asio
54 } // namespace boost
55
56 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
57
58 struct const_member_set_value_1
59 {
60 template <typename V1>
61 void set_value(BOOST_ASIO_MOVE_ARG(V1) v1) const
62 {
63 typename boost::asio::decay<V1>::type tmp(BOOST_ASIO_MOVE_CAST(V1)(v1));
64 (void)tmp;
65 ++call_count;
66 }
67 };
68
69 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
70
71 namespace boost {
72 namespace asio {
73 namespace traits {
74
75 template <typename V1>
76 struct set_value_member<const const_member_set_value_1, void(V1)>
77 {
78 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
79 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
80 typedef void result_type;
81 };
82
83 } // namespace traits
84 } // namespace asio
85 } // namespace boost
86
87 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
88
89 struct const_member_set_value_2
90 {
91 template <typename V1, typename V2>
92 void set_value(BOOST_ASIO_MOVE_ARG(V1) v1, BOOST_ASIO_MOVE_ARG(V2) v2) const
93 {
94 typename boost::asio::decay<V1>::type tmp1(BOOST_ASIO_MOVE_CAST(V1)(v1));
95 (void)tmp1;
96 typename boost::asio::decay<V2>::type tmp2(BOOST_ASIO_MOVE_CAST(V2)(v2));
97 (void)tmp2;
98 ++call_count;
99 }
100 };
101
102 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
103
104 namespace boost {
105 namespace asio {
106 namespace traits {
107
108 template <typename V1, typename V2>
109 struct set_value_member<const const_member_set_value_2, void(V1, V2)>
110 {
111 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
112 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
113 typedef void result_type;
114 };
115
116 } // namespace traits
117 } // namespace asio
118 } // namespace boost
119
120 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
121
122 struct free_set_value_const_receiver_0
123 {
124 friend void set_value(const free_set_value_const_receiver_0&)
125 {
126 ++call_count;
127 }
128 };
129
130 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
131
132 namespace boost {
133 namespace asio {
134 namespace traits {
135
136 template <>
137 struct set_value_free<const free_set_value_const_receiver_0, void()>
138 {
139 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
140 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
141 typedef void result_type;
142 };
143
144 } // namespace traits
145 } // namespace asio
146 } // namespace boost
147
148 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
149
150 struct free_set_value_const_receiver_1
151 {
152 template <typename V1>
153 friend void set_value(const free_set_value_const_receiver_1&,
154 BOOST_ASIO_MOVE_ARG(V1) v1)
155 {
156 typename boost::asio::decay<V1>::type tmp(BOOST_ASIO_MOVE_CAST(V1)(v1));
157 (void)tmp;
158 ++call_count;
159 }
160 };
161
162 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
163
164 namespace boost {
165 namespace asio {
166 namespace traits {
167
168 template <typename V1>
169 struct set_value_free<const free_set_value_const_receiver_1, void(V1)>
170 {
171 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
172 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
173 typedef void result_type;
174 };
175
176 } // namespace traits
177 } // namespace asio
178 } // namespace boost
179
180 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
181
182 struct free_set_value_const_receiver_2
183 {
184 template <typename V1, typename V2>
185 friend void set_value(const free_set_value_const_receiver_2&,
186 BOOST_ASIO_MOVE_ARG(V1) v1, BOOST_ASIO_MOVE_ARG(V2) v2)
187 {
188 typename boost::asio::decay<V1>::type tmp1(BOOST_ASIO_MOVE_CAST(V1)(v1));
189 (void)tmp1;
190 typename boost::asio::decay<V2>::type tmp2(BOOST_ASIO_MOVE_CAST(V2)(v2));
191 (void)tmp2;
192 ++call_count;
193 }
194 };
195
196 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
197
198 namespace boost {
199 namespace asio {
200 namespace traits {
201
202 template <typename V1, typename V2>
203 struct set_value_free<const free_set_value_const_receiver_2, void(V1, V2)>
204 {
205 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
206 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
207 typedef void result_type;
208 };
209
210 } // namespace traits
211 } // namespace asio
212 } // namespace boost
213
214 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
215
216 struct non_const_member_set_value_0
217 {
218 void set_value()
219 {
220 ++call_count;
221 }
222 };
223
224 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
225
226 namespace boost {
227 namespace asio {
228 namespace traits {
229
230 template <>
231 struct set_value_member<non_const_member_set_value_0, void()>
232 {
233 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
234 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
235 typedef void result_type;
236 };
237
238 } // namespace traits
239 } // namespace asio
240 } // namespace boost
241
242 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
243
244 struct non_const_member_set_value_1
245 {
246 template <typename V1>
247 void set_value(BOOST_ASIO_MOVE_ARG(V1) v1)
248 {
249 typename boost::asio::decay<V1>::type tmp(BOOST_ASIO_MOVE_CAST(V1)(v1));
250 (void)tmp;
251 ++call_count;
252 }
253 };
254
255 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
256
257 namespace boost {
258 namespace asio {
259 namespace traits {
260
261 template <typename V1>
262 struct set_value_member<non_const_member_set_value_1, void(V1)>
263 {
264 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
265 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
266 typedef void result_type;
267 };
268
269 } // namespace traits
270 } // namespace asio
271 } // namespace boost
272
273 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
274
275 struct non_const_member_set_value_2
276 {
277 template <typename V1, typename V2>
278 void set_value(BOOST_ASIO_MOVE_ARG(V1) v1, BOOST_ASIO_MOVE_ARG(V2) v2)
279 {
280 typename boost::asio::decay<V1>::type tmp1(BOOST_ASIO_MOVE_CAST(V1)(v1));
281 (void)tmp1;
282 typename boost::asio::decay<V2>::type tmp2(BOOST_ASIO_MOVE_CAST(V2)(v2));
283 (void)tmp2;
284 ++call_count;
285 }
286 };
287
288 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
289
290 namespace boost {
291 namespace asio {
292 namespace traits {
293
294 template <typename V1, typename V2>
295 struct set_value_member<non_const_member_set_value_2, void(V1, V2)>
296 {
297 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
298 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
299 typedef void result_type;
300 };
301
302 } // namespace traits
303 } // namespace asio
304 } // namespace boost
305
306 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
307
308 struct free_set_value_non_const_receiver_0
309 {
310 friend void set_value(free_set_value_non_const_receiver_0&)
311 {
312 ++call_count;
313 }
314 };
315
316 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
317
318 namespace boost {
319 namespace asio {
320 namespace traits {
321
322 template <>
323 struct set_value_free<free_set_value_non_const_receiver_0, void()>
324 {
325 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
326 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
327 typedef void result_type;
328 };
329
330 } // namespace traits
331 } // namespace asio
332 } // namespace boost
333
334 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
335
336 struct free_set_value_non_const_receiver_1
337 {
338 template <typename V1>
339 friend void set_value(free_set_value_non_const_receiver_1&,
340 BOOST_ASIO_MOVE_ARG(V1) v1)
341 {
342 typename boost::asio::decay<V1>::type tmp(BOOST_ASIO_MOVE_CAST(V1)(v1));
343 (void)tmp;
344 ++call_count;
345 }
346 };
347
348 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
349
350 namespace boost {
351 namespace asio {
352 namespace traits {
353
354 template <typename V1>
355 struct set_value_free<free_set_value_non_const_receiver_1, void(V1)>
356 {
357 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
358 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
359 typedef void result_type;
360 };
361
362 } // namespace traits
363 } // namespace asio
364 } // namespace boost
365
366 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
367
368 struct free_set_value_non_const_receiver_2
369 {
370 template <typename V1, typename V2>
371 friend void set_value(free_set_value_non_const_receiver_2&,
372 BOOST_ASIO_MOVE_ARG(V1) v1, BOOST_ASIO_MOVE_ARG(V2) v2)
373 {
374 typename boost::asio::decay<V1>::type tmp1(BOOST_ASIO_MOVE_CAST(V1)(v1));
375 (void)tmp1;
376 typename boost::asio::decay<V2>::type tmp2(BOOST_ASIO_MOVE_CAST(V2)(v2));
377 (void)tmp2;
378 ++call_count;
379 }
380 };
381
382 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
383
384 namespace boost {
385 namespace asio {
386 namespace traits {
387
388 template <typename V1, typename V2>
389 struct set_value_free<free_set_value_non_const_receiver_2, void(V1, V2)>
390 {
391 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
392 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
393 typedef void result_type;
394 };
395
396 } // namespace traits
397 } // namespace asio
398 } // namespace boost
399
400 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
401
402 void test_can_set_value()
403 {
404 BOOST_ASIO_CONSTEXPR bool b1 = exec::can_set_value<
405 no_set_value&>::value;
406 BOOST_ASIO_CHECK(b1 == false);
407
408 BOOST_ASIO_CONSTEXPR bool b2 = exec::can_set_value<
409 const no_set_value&>::value;
410 BOOST_ASIO_CHECK(b2 == false);
411
412 BOOST_ASIO_CONSTEXPR bool b3 = exec::can_set_value<
413 no_set_value&, int>::value;
414 BOOST_ASIO_CHECK(b3 == false);
415
416 BOOST_ASIO_CONSTEXPR bool b4 = exec::can_set_value<
417 const no_set_value&, int>::value;
418 BOOST_ASIO_CHECK(b4 == false);
419
420 BOOST_ASIO_CONSTEXPR bool b5 = exec::can_set_value<
421 no_set_value&, int, std::string>::value;
422 BOOST_ASIO_CHECK(b5 == false);
423
424 BOOST_ASIO_CONSTEXPR bool b6 = exec::can_set_value<
425 const no_set_value&, int, std::string>::value;
426 BOOST_ASIO_CHECK(b6 == false);
427
428 BOOST_ASIO_CONSTEXPR bool b7 = exec::can_set_value<
429 const_member_set_value_0&>::value;
430 BOOST_ASIO_CHECK(b7 == true);
431
432 BOOST_ASIO_CONSTEXPR bool b8 = exec::can_set_value<
433 const const_member_set_value_0&>::value;
434 BOOST_ASIO_CHECK(b8 == true);
435
436 BOOST_ASIO_CONSTEXPR bool b9 = exec::can_set_value<
437 const_member_set_value_0&, int>::value;
438 BOOST_ASIO_CHECK(b9 == false);
439
440 BOOST_ASIO_CONSTEXPR bool b10 = exec::can_set_value<
441 const const_member_set_value_0&, int>::value;
442 BOOST_ASIO_CHECK(b10 == false);
443
444 BOOST_ASIO_CONSTEXPR bool b11 = exec::can_set_value<
445 const_member_set_value_0&, int, std::string>::value;
446 BOOST_ASIO_CHECK(b11 == false);
447
448 BOOST_ASIO_CONSTEXPR bool b12 = exec::can_set_value<
449 const const_member_set_value_0&, int, std::string>::value;
450 BOOST_ASIO_CHECK(b12 == false);
451
452 BOOST_ASIO_CONSTEXPR bool b13 = exec::can_set_value<
453 const_member_set_value_1&>::value;
454 BOOST_ASIO_CHECK(b13 == false);
455
456 BOOST_ASIO_CONSTEXPR bool b14 = exec::can_set_value<
457 const const_member_set_value_1&>::value;
458 BOOST_ASIO_CHECK(b14 == false);
459
460 BOOST_ASIO_CONSTEXPR bool b15 = exec::can_set_value<
461 const_member_set_value_1&, int>::value;
462 BOOST_ASIO_CHECK(b15 == true);
463
464 BOOST_ASIO_CONSTEXPR bool b16 = exec::can_set_value<
465 const const_member_set_value_1&, int>::value;
466 BOOST_ASIO_CHECK(b16 == true);
467
468 BOOST_ASIO_CONSTEXPR bool b17 = exec::can_set_value<
469 const_member_set_value_1&, int, std::string>::value;
470 BOOST_ASIO_CHECK(b17 == false);
471
472 BOOST_ASIO_CONSTEXPR bool b18 = exec::can_set_value<
473 const const_member_set_value_1&, int, std::string>::value;
474 BOOST_ASIO_CHECK(b18 == false);
475
476 BOOST_ASIO_CONSTEXPR bool b19 = exec::can_set_value<
477 const_member_set_value_2&>::value;
478 BOOST_ASIO_CHECK(b19 == false);
479
480 BOOST_ASIO_CONSTEXPR bool b20 = exec::can_set_value<
481 const const_member_set_value_2&>::value;
482 BOOST_ASIO_CHECK(b20 == false);
483
484 BOOST_ASIO_CONSTEXPR bool b21 = exec::can_set_value<
485 const_member_set_value_2&, int>::value;
486 BOOST_ASIO_CHECK(b21 == false);
487
488 BOOST_ASIO_CONSTEXPR bool b22 = exec::can_set_value<
489 const const_member_set_value_2&, int>::value;
490 BOOST_ASIO_CHECK(b22 == false);
491
492 BOOST_ASIO_CONSTEXPR bool b23 = exec::can_set_value<
493 const_member_set_value_2&, int, std::string>::value;
494 BOOST_ASIO_CHECK(b23 == true);
495
496 BOOST_ASIO_CONSTEXPR bool b24 = exec::can_set_value<
497 const const_member_set_value_2&, int, std::string>::value;
498 BOOST_ASIO_CHECK(b24 == true);
499
500 BOOST_ASIO_CONSTEXPR bool b25 = exec::can_set_value<
501 free_set_value_const_receiver_0&>::value;
502 BOOST_ASIO_CHECK(b25 == true);
503
504 BOOST_ASIO_CONSTEXPR bool b26 = exec::can_set_value<
505 const free_set_value_const_receiver_0&>::value;
506 BOOST_ASIO_CHECK(b26 == true);
507
508 BOOST_ASIO_CONSTEXPR bool b27 = exec::can_set_value<
509 free_set_value_const_receiver_0&, int>::value;
510 BOOST_ASIO_CHECK(b27 == false);
511
512 BOOST_ASIO_CONSTEXPR bool b28 = exec::can_set_value<
513 const free_set_value_const_receiver_0&, int>::value;
514 BOOST_ASIO_CHECK(b28 == false);
515
516 BOOST_ASIO_CONSTEXPR bool b29 = exec::can_set_value<
517 free_set_value_const_receiver_0&, int, std::string>::value;
518 BOOST_ASIO_CHECK(b29 == false);
519
520 BOOST_ASIO_CONSTEXPR bool b30 = exec::can_set_value<
521 const free_set_value_const_receiver_0&, int, std::string>::value;
522 BOOST_ASIO_CHECK(b30 == false);
523
524 BOOST_ASIO_CONSTEXPR bool b31 = exec::can_set_value<
525 free_set_value_const_receiver_1&>::value;
526 BOOST_ASIO_CHECK(b31 == false);
527
528 BOOST_ASIO_CONSTEXPR bool b32 = exec::can_set_value<
529 const free_set_value_const_receiver_1&>::value;
530 BOOST_ASIO_CHECK(b32 == false);
531
532 BOOST_ASIO_CONSTEXPR bool b33 = exec::can_set_value<
533 free_set_value_const_receiver_1&, int>::value;
534 BOOST_ASIO_CHECK(b33 == true);
535
536 BOOST_ASIO_CONSTEXPR bool b34 = exec::can_set_value<
537 const free_set_value_const_receiver_1&, int>::value;
538 BOOST_ASIO_CHECK(b34 == true);
539
540 BOOST_ASIO_CONSTEXPR bool b35 = exec::can_set_value<
541 free_set_value_const_receiver_1&, int, std::string>::value;
542 BOOST_ASIO_CHECK(b35 == false);
543
544 BOOST_ASIO_CONSTEXPR bool b36 = exec::can_set_value<
545 const free_set_value_const_receiver_1&, int, std::string>::value;
546 BOOST_ASIO_CHECK(b36 == false);
547
548 BOOST_ASIO_CONSTEXPR bool b37 = exec::can_set_value<
549 free_set_value_const_receiver_2&>::value;
550 BOOST_ASIO_CHECK(b37 == false);
551
552 BOOST_ASIO_CONSTEXPR bool b38 = exec::can_set_value<
553 const free_set_value_const_receiver_2&>::value;
554 BOOST_ASIO_CHECK(b38 == false);
555
556 BOOST_ASIO_CONSTEXPR bool b39 = exec::can_set_value<
557 free_set_value_const_receiver_2&, int>::value;
558 BOOST_ASIO_CHECK(b39 == false);
559
560 BOOST_ASIO_CONSTEXPR bool b40 = exec::can_set_value<
561 const free_set_value_const_receiver_2&, int>::value;
562 BOOST_ASIO_CHECK(b40 == false);
563
564 BOOST_ASIO_CONSTEXPR bool b41 = exec::can_set_value<
565 free_set_value_const_receiver_2&, int, std::string>::value;
566 BOOST_ASIO_CHECK(b41 == true);
567
568 BOOST_ASIO_CONSTEXPR bool b42 = exec::can_set_value<
569 const free_set_value_const_receiver_2&, int, std::string>::value;
570 BOOST_ASIO_CHECK(b42 == true);
571
572 BOOST_ASIO_CONSTEXPR bool b43 = exec::can_set_value<
573 non_const_member_set_value_0&>::value;
574 BOOST_ASIO_CHECK(b43 == true);
575
576 BOOST_ASIO_CONSTEXPR bool b44 = exec::can_set_value<
577 const non_const_member_set_value_0&>::value;
578 BOOST_ASIO_CHECK(b44 == false);
579
580 BOOST_ASIO_CONSTEXPR bool b45 = exec::can_set_value<
581 non_const_member_set_value_0&, int>::value;
582 BOOST_ASIO_CHECK(b45 == false);
583
584 BOOST_ASIO_CONSTEXPR bool b46 = exec::can_set_value<
585 const non_const_member_set_value_0&, int>::value;
586 BOOST_ASIO_CHECK(b46 == false);
587
588 BOOST_ASIO_CONSTEXPR bool b47 = exec::can_set_value<
589 non_const_member_set_value_0&, int, std::string>::value;
590 BOOST_ASIO_CHECK(b47 == false);
591
592 BOOST_ASIO_CONSTEXPR bool b48 = exec::can_set_value<
593 const non_const_member_set_value_0&, int, std::string>::value;
594 BOOST_ASIO_CHECK(b48 == false);
595
596 BOOST_ASIO_CONSTEXPR bool b49 = exec::can_set_value<
597 non_const_member_set_value_1&>::value;
598 BOOST_ASIO_CHECK(b49 == false);
599
600 BOOST_ASIO_CONSTEXPR bool b50 = exec::can_set_value<
601 const non_const_member_set_value_1&>::value;
602 BOOST_ASIO_CHECK(b50 == false);
603
604 BOOST_ASIO_CONSTEXPR bool b51 = exec::can_set_value<
605 non_const_member_set_value_1&, int>::value;
606 BOOST_ASIO_CHECK(b51 == true);
607
608 BOOST_ASIO_CONSTEXPR bool b52 = exec::can_set_value<
609 const non_const_member_set_value_1&, int>::value;
610 BOOST_ASIO_CHECK(b52 == false);
611
612 BOOST_ASIO_CONSTEXPR bool b53 = exec::can_set_value<
613 non_const_member_set_value_1&, int, std::string>::value;
614 BOOST_ASIO_CHECK(b53 == false);
615
616 BOOST_ASIO_CONSTEXPR bool b54 = exec::can_set_value<
617 const non_const_member_set_value_1&, int, std::string>::value;
618 BOOST_ASIO_CHECK(b54 == false);
619
620 BOOST_ASIO_CONSTEXPR bool b55 = exec::can_set_value<
621 non_const_member_set_value_2&>::value;
622 BOOST_ASIO_CHECK(b55 == false);
623
624 BOOST_ASIO_CONSTEXPR bool b56 = exec::can_set_value<
625 const non_const_member_set_value_2&>::value;
626 BOOST_ASIO_CHECK(b56 == false);
627
628 BOOST_ASIO_CONSTEXPR bool b57 = exec::can_set_value<
629 non_const_member_set_value_2&, int>::value;
630 BOOST_ASIO_CHECK(b57 == false);
631
632 BOOST_ASIO_CONSTEXPR bool b58 = exec::can_set_value<
633 const non_const_member_set_value_2&, int>::value;
634 BOOST_ASIO_CHECK(b58 == false);
635
636 BOOST_ASIO_CONSTEXPR bool b59 = exec::can_set_value<
637 non_const_member_set_value_2&, int, std::string>::value;
638 BOOST_ASIO_CHECK(b59 == true);
639
640 BOOST_ASIO_CONSTEXPR bool b60 = exec::can_set_value<
641 const non_const_member_set_value_2&, int, std::string>::value;
642 BOOST_ASIO_CHECK(b60 == false);
643
644 BOOST_ASIO_CONSTEXPR bool b61 = exec::can_set_value<
645 free_set_value_non_const_receiver_0&>::value;
646 BOOST_ASIO_CHECK(b61 == true);
647
648 BOOST_ASIO_CONSTEXPR bool b62 = exec::can_set_value<
649 const free_set_value_non_const_receiver_0&>::value;
650 BOOST_ASIO_CHECK(b62 == false);
651
652 BOOST_ASIO_CONSTEXPR bool b63 = exec::can_set_value<
653 free_set_value_non_const_receiver_0&, int>::value;
654 BOOST_ASIO_CHECK(b63 == false);
655
656 BOOST_ASIO_CONSTEXPR bool b64 = exec::can_set_value<
657 const free_set_value_non_const_receiver_0&, int>::value;
658 BOOST_ASIO_CHECK(b64 == false);
659
660 BOOST_ASIO_CONSTEXPR bool b65 = exec::can_set_value<
661 free_set_value_non_const_receiver_0&, int, std::string>::value;
662 BOOST_ASIO_CHECK(b65 == false);
663
664 BOOST_ASIO_CONSTEXPR bool b66 = exec::can_set_value<
665 const free_set_value_non_const_receiver_0&, int, std::string>::value;
666 BOOST_ASIO_CHECK(b66 == false);
667
668 BOOST_ASIO_CONSTEXPR bool b67 = exec::can_set_value<
669 free_set_value_non_const_receiver_1&>::value;
670 BOOST_ASIO_CHECK(b67 == false);
671
672 BOOST_ASIO_CONSTEXPR bool b68 = exec::can_set_value<
673 const free_set_value_non_const_receiver_1&>::value;
674 BOOST_ASIO_CHECK(b68 == false);
675
676 BOOST_ASIO_CONSTEXPR bool b69 = exec::can_set_value<
677 free_set_value_non_const_receiver_1&, int>::value;
678 BOOST_ASIO_CHECK(b69 == true);
679
680 BOOST_ASIO_CONSTEXPR bool b70 = exec::can_set_value<
681 const free_set_value_non_const_receiver_1&, int>::value;
682 BOOST_ASIO_CHECK(b70 == false);
683
684 BOOST_ASIO_CONSTEXPR bool b71 = exec::can_set_value<
685 free_set_value_non_const_receiver_1&, int, std::string>::value;
686 BOOST_ASIO_CHECK(b71 == false);
687
688 BOOST_ASIO_CONSTEXPR bool b72 = exec::can_set_value<
689 const free_set_value_non_const_receiver_1&, int, std::string>::value;
690 BOOST_ASIO_CHECK(b72 == false);
691
692 BOOST_ASIO_CONSTEXPR bool b73 = exec::can_set_value<
693 free_set_value_non_const_receiver_2&>::value;
694 BOOST_ASIO_CHECK(b73 == false);
695
696 BOOST_ASIO_CONSTEXPR bool b74 = exec::can_set_value<
697 const free_set_value_non_const_receiver_2&>::value;
698 BOOST_ASIO_CHECK(b74 == false);
699
700 BOOST_ASIO_CONSTEXPR bool b75 = exec::can_set_value<
701 free_set_value_non_const_receiver_2&, int>::value;
702 BOOST_ASIO_CHECK(b75 == false);
703
704 BOOST_ASIO_CONSTEXPR bool b76 = exec::can_set_value<
705 const free_set_value_non_const_receiver_2&, int>::value;
706 BOOST_ASIO_CHECK(b76 == false);
707
708 BOOST_ASIO_CONSTEXPR bool b77 = exec::can_set_value<
709 free_set_value_non_const_receiver_2&, int, std::string>::value;
710 BOOST_ASIO_CHECK(b77 == true);
711
712 BOOST_ASIO_CONSTEXPR bool b78 = exec::can_set_value<
713 const free_set_value_non_const_receiver_2&, int, std::string>::value;
714 BOOST_ASIO_CHECK(b78 == false);
715 }
716
717 void increment(int* count)
718 {
719 ++(*count);
720 }
721
722 void test_set_value()
723 {
724 call_count = 0;
725 const_member_set_value_0 ex1 = {};
726 exec::set_value(ex1);
727 BOOST_ASIO_CHECK(call_count == 1);
728
729 call_count = 0;
730 const const_member_set_value_0 ex2 = {};
731 exec::set_value(ex2);
732 BOOST_ASIO_CHECK(call_count == 1);
733
734 call_count = 0;
735 exec::set_value(const_member_set_value_0());
736 BOOST_ASIO_CHECK(call_count == 1);
737
738 call_count = 0;
739 const_member_set_value_1 ex3 = {};
740 exec::set_value(ex3, 123);
741 BOOST_ASIO_CHECK(call_count == 1);
742
743 call_count = 0;
744 const const_member_set_value_1 ex4 = {};
745 exec::set_value(ex4, 123);
746 BOOST_ASIO_CHECK(call_count == 1);
747
748 call_count = 0;
749 exec::set_value(const_member_set_value_1(), 123);
750 BOOST_ASIO_CHECK(call_count == 1);
751
752 call_count = 0;
753 const_member_set_value_2 ex5 = {};
754 exec::set_value(ex5, 123, std::string());
755 BOOST_ASIO_CHECK(call_count == 1);
756
757 call_count = 0;
758 const const_member_set_value_2 ex6 = {};
759 exec::set_value(ex6, 123, std::string());
760 BOOST_ASIO_CHECK(call_count == 1);
761
762 call_count = 0;
763 exec::set_value(const_member_set_value_2(), 123, std::string());
764 BOOST_ASIO_CHECK(call_count == 1);
765
766 call_count = 0;
767 free_set_value_const_receiver_0 ex7 = {};
768 exec::set_value(ex7);
769 BOOST_ASIO_CHECK(call_count == 1);
770
771 call_count = 0;
772 const free_set_value_const_receiver_0 ex8 = {};
773 exec::set_value(ex8);
774 BOOST_ASIO_CHECK(call_count == 1);
775
776 call_count = 0;
777 exec::set_value(free_set_value_const_receiver_0());
778 BOOST_ASIO_CHECK(call_count == 1);
779
780 call_count = 0;
781 free_set_value_const_receiver_1 ex9 = {};
782 exec::set_value(ex9, 123);
783 BOOST_ASIO_CHECK(call_count == 1);
784
785 call_count = 0;
786 const free_set_value_const_receiver_1 ex10 = {};
787 exec::set_value(ex10, 123);
788 BOOST_ASIO_CHECK(call_count == 1);
789
790 call_count = 0;
791 exec::set_value(free_set_value_const_receiver_1(), 123);
792 BOOST_ASIO_CHECK(call_count == 1);
793
794 call_count = 0;
795 free_set_value_const_receiver_2 ex11 = {};
796 exec::set_value(ex11, 123, std::string());
797 BOOST_ASIO_CHECK(call_count == 1);
798
799 call_count = 0;
800 const free_set_value_const_receiver_2 ex12 = {};
801 exec::set_value(ex12, 123, std::string());
802 BOOST_ASIO_CHECK(call_count == 1);
803
804 call_count = 0;
805 exec::set_value(free_set_value_const_receiver_2(), 123, std::string());
806 BOOST_ASIO_CHECK(call_count == 1);
807
808 call_count = 0;
809 non_const_member_set_value_0 ex13 = {};
810 exec::set_value(ex13);
811 BOOST_ASIO_CHECK(call_count == 1);
812
813 call_count = 0;
814 non_const_member_set_value_1 ex14 = {};
815 exec::set_value(ex14, 123);
816 BOOST_ASIO_CHECK(call_count == 1);
817
818 call_count = 0;
819 non_const_member_set_value_2 ex15 = {};
820 exec::set_value(ex15, 123, std::string());
821 BOOST_ASIO_CHECK(call_count == 1);
822
823 call_count = 0;
824 free_set_value_non_const_receiver_0 ex16 = {};
825 exec::set_value(ex16);
826 BOOST_ASIO_CHECK(call_count == 1);
827
828 call_count = 0;
829 free_set_value_non_const_receiver_1 ex17 = {};
830 exec::set_value(ex17, 123);
831 BOOST_ASIO_CHECK(call_count == 1);
832
833 call_count = 0;
834 free_set_value_non_const_receiver_2 ex18 = {};
835 exec::set_value(ex18, 123, std::string());
836 BOOST_ASIO_CHECK(call_count == 1);
837 }
838
839 BOOST_ASIO_TEST_SUITE
840 (
841 "set_value",
842 BOOST_ASIO_TEST_CASE(test_can_set_value)
843 BOOST_ASIO_TEST_CASE(test_set_value)
844 )