5 // Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com)
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)
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)
16 // Test that header file is self-contained.
17 #include <boost/asio/execution/set_value.hpp>
20 #include "../unit_test.hpp"
22 namespace exec
= boost::asio::execution
;
24 static int call_count
= 0;
30 struct const_member_set_value_0
32 void set_value() const
38 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
45 struct set_value_member
<const const_member_set_value_0
, void()>
47 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid
= true);
48 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept
= false);
49 typedef void result_type
;
56 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
58 struct const_member_set_value_1
60 template <typename V1
>
61 void set_value(BOOST_ASIO_MOVE_ARG(V1
) v1
) const
63 typename
boost::asio::decay
<V1
>::type
tmp(BOOST_ASIO_MOVE_CAST(V1
)(v1
));
69 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
75 template <typename V1
>
76 struct set_value_member
<const const_member_set_value_1
, void(V1
)>
78 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid
= true);
79 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept
= false);
80 typedef void result_type
;
87 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
89 struct const_member_set_value_2
91 template <typename V1
, typename V2
>
92 void set_value(BOOST_ASIO_MOVE_ARG(V1
) v1
, BOOST_ASIO_MOVE_ARG(V2
) v2
) const
94 typename
boost::asio::decay
<V1
>::type
tmp1(BOOST_ASIO_MOVE_CAST(V1
)(v1
));
96 typename
boost::asio::decay
<V2
>::type
tmp2(BOOST_ASIO_MOVE_CAST(V2
)(v2
));
102 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
108 template <typename V1
, typename V2
>
109 struct set_value_member
<const const_member_set_value_2
, void(V1
, V2
)>
111 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid
= true);
112 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept
= false);
113 typedef void result_type
;
116 } // namespace traits
120 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
122 struct free_set_value_const_receiver_0
124 friend void set_value(const free_set_value_const_receiver_0
&)
130 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
137 struct set_value_free
<const free_set_value_const_receiver_0
, void()>
139 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid
= true);
140 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept
= false);
141 typedef void result_type
;
144 } // namespace traits
148 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
150 struct free_set_value_const_receiver_1
152 template <typename V1
>
153 friend void set_value(const free_set_value_const_receiver_1
&,
154 BOOST_ASIO_MOVE_ARG(V1
) v1
)
156 typename
boost::asio::decay
<V1
>::type
tmp(BOOST_ASIO_MOVE_CAST(V1
)(v1
));
162 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
168 template <typename V1
>
169 struct set_value_free
<const free_set_value_const_receiver_1
, void(V1
)>
171 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid
= true);
172 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept
= false);
173 typedef void result_type
;
176 } // namespace traits
180 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
182 struct free_set_value_const_receiver_2
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
)
188 typename
boost::asio::decay
<V1
>::type
tmp1(BOOST_ASIO_MOVE_CAST(V1
)(v1
));
190 typename
boost::asio::decay
<V2
>::type
tmp2(BOOST_ASIO_MOVE_CAST(V2
)(v2
));
196 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
202 template <typename V1
, typename V2
>
203 struct set_value_free
<const free_set_value_const_receiver_2
, void(V1
, V2
)>
205 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid
= true);
206 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept
= false);
207 typedef void result_type
;
210 } // namespace traits
214 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
216 struct non_const_member_set_value_0
224 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
231 struct set_value_member
<non_const_member_set_value_0
, void()>
233 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid
= true);
234 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept
= false);
235 typedef void result_type
;
238 } // namespace traits
242 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
244 struct non_const_member_set_value_1
246 template <typename V1
>
247 void set_value(BOOST_ASIO_MOVE_ARG(V1
) v1
)
249 typename
boost::asio::decay
<V1
>::type
tmp(BOOST_ASIO_MOVE_CAST(V1
)(v1
));
255 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
261 template <typename V1
>
262 struct set_value_member
<non_const_member_set_value_1
, void(V1
)>
264 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid
= true);
265 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept
= false);
266 typedef void result_type
;
269 } // namespace traits
273 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
275 struct non_const_member_set_value_2
277 template <typename V1
, typename V2
>
278 void set_value(BOOST_ASIO_MOVE_ARG(V1
) v1
, BOOST_ASIO_MOVE_ARG(V2
) v2
)
280 typename
boost::asio::decay
<V1
>::type
tmp1(BOOST_ASIO_MOVE_CAST(V1
)(v1
));
282 typename
boost::asio::decay
<V2
>::type
tmp2(BOOST_ASIO_MOVE_CAST(V2
)(v2
));
288 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
294 template <typename V1
, typename V2
>
295 struct set_value_member
<non_const_member_set_value_2
, void(V1
, V2
)>
297 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid
= true);
298 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept
= false);
299 typedef void result_type
;
302 } // namespace traits
306 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT)
308 struct free_set_value_non_const_receiver_0
310 friend void set_value(free_set_value_non_const_receiver_0
&)
316 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
323 struct set_value_free
<free_set_value_non_const_receiver_0
, void()>
325 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid
= true);
326 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept
= false);
327 typedef void result_type
;
330 } // namespace traits
334 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
336 struct free_set_value_non_const_receiver_1
338 template <typename V1
>
339 friend void set_value(free_set_value_non_const_receiver_1
&,
340 BOOST_ASIO_MOVE_ARG(V1
) v1
)
342 typename
boost::asio::decay
<V1
>::type
tmp(BOOST_ASIO_MOVE_CAST(V1
)(v1
));
348 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
354 template <typename V1
>
355 struct set_value_free
<free_set_value_non_const_receiver_1
, void(V1
)>
357 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid
= true);
358 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept
= false);
359 typedef void result_type
;
362 } // namespace traits
366 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
368 struct free_set_value_non_const_receiver_2
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
)
374 typename
boost::asio::decay
<V1
>::type
tmp1(BOOST_ASIO_MOVE_CAST(V1
)(v1
));
376 typename
boost::asio::decay
<V2
>::type
tmp2(BOOST_ASIO_MOVE_CAST(V2
)(v2
));
382 #if !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
388 template <typename V1
, typename V2
>
389 struct set_value_free
<free_set_value_non_const_receiver_2
, void(V1
, V2
)>
391 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid
= true);
392 BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept
= false);
393 typedef void result_type
;
396 } // namespace traits
400 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT)
402 void test_can_set_value()
404 BOOST_ASIO_CONSTEXPR
bool b1
= exec::can_set_value
<
405 no_set_value
&>::value
;
406 BOOST_ASIO_CHECK(b1
== false);
408 BOOST_ASIO_CONSTEXPR
bool b2
= exec::can_set_value
<
409 const no_set_value
&>::value
;
410 BOOST_ASIO_CHECK(b2
== false);
412 BOOST_ASIO_CONSTEXPR
bool b3
= exec::can_set_value
<
413 no_set_value
&, int>::value
;
414 BOOST_ASIO_CHECK(b3
== false);
416 BOOST_ASIO_CONSTEXPR
bool b4
= exec::can_set_value
<
417 const no_set_value
&, int>::value
;
418 BOOST_ASIO_CHECK(b4
== false);
420 BOOST_ASIO_CONSTEXPR
bool b5
= exec::can_set_value
<
421 no_set_value
&, int, std::string
>::value
;
422 BOOST_ASIO_CHECK(b5
== false);
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);
428 BOOST_ASIO_CONSTEXPR
bool b7
= exec::can_set_value
<
429 const_member_set_value_0
&>::value
;
430 BOOST_ASIO_CHECK(b7
== true);
432 BOOST_ASIO_CONSTEXPR
bool b8
= exec::can_set_value
<
433 const const_member_set_value_0
&>::value
;
434 BOOST_ASIO_CHECK(b8
== true);
436 BOOST_ASIO_CONSTEXPR
bool b9
= exec::can_set_value
<
437 const_member_set_value_0
&, int>::value
;
438 BOOST_ASIO_CHECK(b9
== false);
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);
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);
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);
452 BOOST_ASIO_CONSTEXPR
bool b13
= exec::can_set_value
<
453 const_member_set_value_1
&>::value
;
454 BOOST_ASIO_CHECK(b13
== false);
456 BOOST_ASIO_CONSTEXPR
bool b14
= exec::can_set_value
<
457 const const_member_set_value_1
&>::value
;
458 BOOST_ASIO_CHECK(b14
== false);
460 BOOST_ASIO_CONSTEXPR
bool b15
= exec::can_set_value
<
461 const_member_set_value_1
&, int>::value
;
462 BOOST_ASIO_CHECK(b15
== true);
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);
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);
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);
476 BOOST_ASIO_CONSTEXPR
bool b19
= exec::can_set_value
<
477 const_member_set_value_2
&>::value
;
478 BOOST_ASIO_CHECK(b19
== false);
480 BOOST_ASIO_CONSTEXPR
bool b20
= exec::can_set_value
<
481 const const_member_set_value_2
&>::value
;
482 BOOST_ASIO_CHECK(b20
== false);
484 BOOST_ASIO_CONSTEXPR
bool b21
= exec::can_set_value
<
485 const_member_set_value_2
&, int>::value
;
486 BOOST_ASIO_CHECK(b21
== false);
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);
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);
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);
500 BOOST_ASIO_CONSTEXPR
bool b25
= exec::can_set_value
<
501 free_set_value_const_receiver_0
&>::value
;
502 BOOST_ASIO_CHECK(b25
== true);
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);
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);
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);
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);
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);
524 BOOST_ASIO_CONSTEXPR
bool b31
= exec::can_set_value
<
525 free_set_value_const_receiver_1
&>::value
;
526 BOOST_ASIO_CHECK(b31
== false);
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);
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);
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);
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);
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);
548 BOOST_ASIO_CONSTEXPR
bool b37
= exec::can_set_value
<
549 free_set_value_const_receiver_2
&>::value
;
550 BOOST_ASIO_CHECK(b37
== false);
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);
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);
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);
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);
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);
572 BOOST_ASIO_CONSTEXPR
bool b43
= exec::can_set_value
<
573 non_const_member_set_value_0
&>::value
;
574 BOOST_ASIO_CHECK(b43
== true);
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);
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);
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);
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);
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);
596 BOOST_ASIO_CONSTEXPR
bool b49
= exec::can_set_value
<
597 non_const_member_set_value_1
&>::value
;
598 BOOST_ASIO_CHECK(b49
== false);
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);
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);
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);
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);
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);
620 BOOST_ASIO_CONSTEXPR
bool b55
= exec::can_set_value
<
621 non_const_member_set_value_2
&>::value
;
622 BOOST_ASIO_CHECK(b55
== false);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
717 void increment(int* count
)
722 void test_set_value()
725 const_member_set_value_0 ex1
= {};
726 exec::set_value(ex1
);
727 BOOST_ASIO_CHECK(call_count
== 1);
730 const const_member_set_value_0 ex2
= {};
731 exec::set_value(ex2
);
732 BOOST_ASIO_CHECK(call_count
== 1);
735 exec::set_value(const_member_set_value_0());
736 BOOST_ASIO_CHECK(call_count
== 1);
739 const_member_set_value_1 ex3
= {};
740 exec::set_value(ex3
, 123);
741 BOOST_ASIO_CHECK(call_count
== 1);
744 const const_member_set_value_1 ex4
= {};
745 exec::set_value(ex4
, 123);
746 BOOST_ASIO_CHECK(call_count
== 1);
749 exec::set_value(const_member_set_value_1(), 123);
750 BOOST_ASIO_CHECK(call_count
== 1);
753 const_member_set_value_2 ex5
= {};
754 exec::set_value(ex5
, 123, std::string());
755 BOOST_ASIO_CHECK(call_count
== 1);
758 const const_member_set_value_2 ex6
= {};
759 exec::set_value(ex6
, 123, std::string());
760 BOOST_ASIO_CHECK(call_count
== 1);
763 exec::set_value(const_member_set_value_2(), 123, std::string());
764 BOOST_ASIO_CHECK(call_count
== 1);
767 free_set_value_const_receiver_0 ex7
= {};
768 exec::set_value(ex7
);
769 BOOST_ASIO_CHECK(call_count
== 1);
772 const free_set_value_const_receiver_0 ex8
= {};
773 exec::set_value(ex8
);
774 BOOST_ASIO_CHECK(call_count
== 1);
777 exec::set_value(free_set_value_const_receiver_0());
778 BOOST_ASIO_CHECK(call_count
== 1);
781 free_set_value_const_receiver_1 ex9
= {};
782 exec::set_value(ex9
, 123);
783 BOOST_ASIO_CHECK(call_count
== 1);
786 const free_set_value_const_receiver_1 ex10
= {};
787 exec::set_value(ex10
, 123);
788 BOOST_ASIO_CHECK(call_count
== 1);
791 exec::set_value(free_set_value_const_receiver_1(), 123);
792 BOOST_ASIO_CHECK(call_count
== 1);
795 free_set_value_const_receiver_2 ex11
= {};
796 exec::set_value(ex11
, 123, std::string());
797 BOOST_ASIO_CHECK(call_count
== 1);
800 const free_set_value_const_receiver_2 ex12
= {};
801 exec::set_value(ex12
, 123, std::string());
802 BOOST_ASIO_CHECK(call_count
== 1);
805 exec::set_value(free_set_value_const_receiver_2(), 123, std::string());
806 BOOST_ASIO_CHECK(call_count
== 1);
809 non_const_member_set_value_0 ex13
= {};
810 exec::set_value(ex13
);
811 BOOST_ASIO_CHECK(call_count
== 1);
814 non_const_member_set_value_1 ex14
= {};
815 exec::set_value(ex14
, 123);
816 BOOST_ASIO_CHECK(call_count
== 1);
819 non_const_member_set_value_2 ex15
= {};
820 exec::set_value(ex15
, 123, std::string());
821 BOOST_ASIO_CHECK(call_count
== 1);
824 free_set_value_non_const_receiver_0 ex16
= {};
825 exec::set_value(ex16
);
826 BOOST_ASIO_CHECK(call_count
== 1);
829 free_set_value_non_const_receiver_1 ex17
= {};
830 exec::set_value(ex17
, 123);
831 BOOST_ASIO_CHECK(call_count
== 1);
834 free_set_value_non_const_receiver_2 ex18
= {};
835 exec::set_value(ex18
, 123, std::string());
836 BOOST_ASIO_CHECK(call_count
== 1);
839 BOOST_ASIO_TEST_SUITE
842 BOOST_ASIO_TEST_CASE(test_can_set_value
)
843 BOOST_ASIO_TEST_CASE(test_set_value
)