• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // blocking_adaptation.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/blocking_adaptation.hpp>
18 
19 #include <boost/asio/prefer.hpp>
20 #include <boost/asio/query.hpp>
21 #include <boost/asio/require.hpp>
22 #include "../unit_test.hpp"
23 
24 namespace exec = boost::asio::execution;
25 
26 typedef exec::blocking_adaptation_t s;
27 typedef exec::blocking_adaptation_t::disallowed_t n1;
28 typedef exec::blocking_adaptation_t::allowed_t n2;
29 
30 struct ex_nq_nr
31 {
32   template <typename F>
executeex_nq_nr33   void execute(const F&) const
34   {
35   }
36 
operator ==(const ex_nq_nr &,const ex_nq_nr &)37   friend bool operator==(const ex_nq_nr&, const ex_nq_nr&) BOOST_ASIO_NOEXCEPT
38   {
39     return true;
40   }
41 
operator !=(const ex_nq_nr &,const ex_nq_nr &)42   friend bool operator!=(const ex_nq_nr&, const ex_nq_nr&) BOOST_ASIO_NOEXCEPT
43   {
44     return false;
45   }
46 };
47 
48 namespace boost {
49 namespace asio {
50 namespace traits {
51 
52 #if !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
53 
54 template <>
55 struct equality_comparable<ex_nq_nr>
56 {
57   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
58   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
59 };
60 
61 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
62 
63 #if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
64 
65 template <typename Function>
66 struct execute_member<ex_nq_nr, Function>
67 {
68   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
69   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
70 
71   typedef void result_type;
72 };
73 
74 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
75 
76 } // namespace traits
77 } // namespace asio
78 } // namespace boost
79 
80 template <typename ResultType, typename ParamType, typename Result>
81 struct ex_cq_nr
82 {
queryex_cq_nr83   static BOOST_ASIO_CONSTEXPR ResultType query(ParamType) BOOST_ASIO_NOEXCEPT
84   {
85     return Result();
86   }
87 
88   template <typename F>
executeex_cq_nr89   void execute(const F&) const
90   {
91   }
92 
operator ==(const ex_cq_nr &,const ex_cq_nr &)93   friend bool operator==(const ex_cq_nr&, const ex_cq_nr&) BOOST_ASIO_NOEXCEPT
94   {
95     return true;
96   }
97 
operator !=(const ex_cq_nr &,const ex_cq_nr &)98   friend bool operator!=(const ex_cq_nr&, const ex_cq_nr&) BOOST_ASIO_NOEXCEPT
99   {
100     return false;
101   }
102 };
103 
104 namespace boost {
105 namespace asio {
106 namespace traits {
107 
108 #if !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
109 
110 template <typename ResultType, typename ParamType, typename Result>
111 struct equality_comparable<ex_cq_nr<ResultType, ParamType, Result> >
112 {
113   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
114   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
115 };
116 
117 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
118 
119 #if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
120 
121 template <typename ResultType, typename ParamType,
122     typename Result, typename Function>
123 struct execute_member<ex_cq_nr<ResultType, ParamType, Result>, Function>
124 {
125   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
126   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
127 
128   typedef void result_type;
129 };
130 
131 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
132 
133 #if !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
134 
135 template <typename ResultType, typename ParamType,
136   typename Result, typename Param>
137 struct query_static_constexpr_member<
138   ex_cq_nr<ResultType, ParamType, Result>, Param,
139   typename boost::asio::enable_if<
140     boost::asio::is_convertible<Param, ParamType>::value
141   >::type>
142 {
143   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
144   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
145 
146   typedef Result result_type; // Must return raw result type.
147 
valueboost::asio::traits::query_static_constexpr_member148   static BOOST_ASIO_CONSTEXPR result_type value()
149   {
150     return Result();
151   }
152 };
153 
154 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_STATIC_CONSTEXPR_MEMBER_TRAIT)
155 
156 } // namespace traits
157 } // namespace asio
158 } // namespace boost
159 
160 template <typename ResultType, typename ParamType, typename Result>
161 struct ex_mq_nr
162 {
queryex_mq_nr163   ResultType query(ParamType) const BOOST_ASIO_NOEXCEPT
164   {
165     return Result();
166   }
167 
168   template <typename F>
executeex_mq_nr169   void execute(const F&) const
170   {
171   }
172 
operator ==(const ex_mq_nr &,const ex_mq_nr &)173   friend bool operator==(const ex_mq_nr&, const ex_mq_nr&) BOOST_ASIO_NOEXCEPT
174   {
175     return true;
176   }
177 
operator !=(const ex_mq_nr &,const ex_mq_nr &)178   friend bool operator!=(const ex_mq_nr&, const ex_mq_nr&) BOOST_ASIO_NOEXCEPT
179   {
180     return false;
181   }
182 };
183 
184 namespace boost {
185 namespace asio {
186 namespace traits {
187 
188 #if !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
189 
190 template <typename ResultType, typename ParamType, typename Result>
191 struct equality_comparable<ex_mq_nr<ResultType, ParamType, Result> >
192 {
193   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
194   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
195 };
196 
197 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
198 
199 #if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
200 
201 template <typename ResultType, typename ParamType,
202     typename Result, typename Function>
203 struct execute_member<ex_mq_nr<ResultType, ParamType, Result>, Function>
204 {
205   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
206   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
207 
208   typedef void result_type;
209 };
210 
211 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
212 
213 #if !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
214 
215 template <typename ResultType, typename ParamType,
216   typename Result, typename Param>
217 struct query_member<
218   ex_mq_nr<ResultType, ParamType, Result>, Param,
219   typename boost::asio::enable_if<
220     boost::asio::is_convertible<Param, ParamType>::value
221   >::type>
222 {
223   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
224   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
225 
226   typedef ResultType result_type;
227 };
228 
229 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
230 
231 } // namespace traits
232 } // namespace asio
233 } // namespace boost
234 
235 template <typename ResultType, typename ParamType, typename Result>
236 struct ex_fq_nr
237 {
query(const ex_fq_nr &,ParamType)238   friend ResultType query(const ex_fq_nr&, ParamType) BOOST_ASIO_NOEXCEPT
239   {
240     return Result();
241   }
242 
243   template <typename F>
executeex_fq_nr244   void execute(const F&) const
245   {
246   }
247 
operator ==(const ex_fq_nr &,const ex_fq_nr &)248   friend bool operator==(const ex_fq_nr&, const ex_fq_nr&) BOOST_ASIO_NOEXCEPT
249   {
250     return true;
251   }
252 
operator !=(const ex_fq_nr &,const ex_fq_nr &)253   friend bool operator!=(const ex_fq_nr&, const ex_fq_nr&) BOOST_ASIO_NOEXCEPT
254   {
255     return false;
256   }
257 };
258 
259 namespace boost {
260 namespace asio {
261 namespace traits {
262 
263 #if !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
264 
265 template <typename ResultType, typename ParamType, typename Result>
266 struct equality_comparable<ex_fq_nr<ResultType, ParamType, Result> >
267 {
268   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
269   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
270 };
271 
272 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
273 
274 #if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
275 
276 template <typename ResultType, typename ParamType,
277     typename Result, typename Function>
278 struct execute_member<ex_fq_nr<ResultType, ParamType, Result>, Function>
279 {
280   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
281   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
282 
283   typedef void result_type;
284 };
285 
286 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
287 
288 #if !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
289 
290 template <typename ResultType, typename ParamType,
291   typename Result, typename Param>
292 struct query_free<
293   ex_fq_nr<ResultType, ParamType, Result>, Param,
294   typename boost::asio::enable_if<
295     boost::asio::is_convertible<Param, ParamType>::value
296   >::type>
297 {
298   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
299   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
300 
301   typedef ResultType result_type;
302 };
303 
304 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
305 
306 } // namespace traits
307 } // namespace asio
308 } // namespace boost
309 
310 template <typename CurrentType, typename OtherType>
311 struct ex_mq_mr
312 {
queryex_mq_mr313   CurrentType query(CurrentType) const BOOST_ASIO_NOEXCEPT
314   {
315     return CurrentType();
316   }
317 
queryex_mq_mr318   CurrentType query(OtherType) const BOOST_ASIO_NOEXCEPT
319   {
320     return CurrentType();
321   }
322 
requireex_mq_mr323   ex_mq_mr<CurrentType, OtherType> require(
324       CurrentType) const BOOST_ASIO_NOEXCEPT
325   {
326     return ex_mq_mr<CurrentType, OtherType>();
327   }
328 
requireex_mq_mr329   ex_mq_mr<OtherType, CurrentType> require(
330       OtherType) const BOOST_ASIO_NOEXCEPT
331   {
332     return ex_mq_mr<OtherType, CurrentType>();
333   }
334 
335   template <typename F>
executeex_mq_mr336   void execute(const F&) const
337   {
338   }
339 
operator ==(const ex_mq_mr &,const ex_mq_mr &)340   friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) BOOST_ASIO_NOEXCEPT
341   {
342     return true;
343   }
344 
operator !=(const ex_mq_mr &,const ex_mq_mr &)345   friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) BOOST_ASIO_NOEXCEPT
346   {
347     return false;
348   }
349 };
350 
351 template <typename CurrentType>
352 struct ex_mq_mr<CurrentType, CurrentType>
353 {
queryex_mq_mr354   CurrentType query(CurrentType) const BOOST_ASIO_NOEXCEPT
355   {
356     return CurrentType();
357   }
358 
requireex_mq_mr359   ex_mq_mr<CurrentType, CurrentType> require(
360       CurrentType) const BOOST_ASIO_NOEXCEPT
361   {
362     return ex_mq_mr<CurrentType, CurrentType>();
363   }
364 
365   template <typename F>
executeex_mq_mr366   void execute(const F&) const
367   {
368   }
369 
operator ==(const ex_mq_mr &,const ex_mq_mr &)370   friend bool operator==(const ex_mq_mr&, const ex_mq_mr&) BOOST_ASIO_NOEXCEPT
371   {
372     return true;
373   }
374 
operator !=(const ex_mq_mr &,const ex_mq_mr &)375   friend bool operator!=(const ex_mq_mr&, const ex_mq_mr&) BOOST_ASIO_NOEXCEPT
376   {
377     return false;
378   }
379 };
380 
381 namespace boost {
382 namespace asio {
383 namespace traits {
384 
385 #if !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
386 
387 template <typename CurrentType, typename OtherType>
388 struct equality_comparable<ex_mq_mr<CurrentType, OtherType> >
389 {
390   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
391   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
392 };
393 
394 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
395 
396 #if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
397 
398 template <typename CurrentType, typename OtherType, typename Function>
399 struct execute_member<ex_mq_mr<CurrentType, OtherType>, Function>
400 {
401   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
402   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
403 
404   typedef void result_type;
405 };
406 
407 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
408 
409 #if !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
410 
411 template <typename CurrentType, typename OtherType, typename Param>
412 struct query_member<
413   ex_mq_mr<CurrentType, OtherType>, Param,
414   typename boost::asio::enable_if<
415     boost::asio::is_convertible<Param, CurrentType>::value
416       || boost::asio::is_convertible<Param, OtherType>::value
417   >::type>
418 {
419   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
420   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
421 
422   typedef CurrentType result_type;
423 };
424 
425 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT)
426 
427 #if !defined(BOOST_ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
428 
429 template <typename CurrentType, typename OtherType, typename Param>
430 struct require_member<
431   ex_mq_mr<CurrentType, OtherType>, Param,
432   typename boost::asio::enable_if<
433     boost::asio::is_convertible<Param, CurrentType>::value
434   >::type>
435 {
436   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
437   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
438 
439   typedef ex_mq_mr<CurrentType, OtherType> result_type;
440 };
441 
442 template <typename CurrentType, typename OtherType, typename Param>
443 struct require_member<
444   ex_mq_mr<CurrentType, OtherType>, Param,
445   typename boost::asio::enable_if<
446     boost::asio::is_convertible<Param, OtherType>::value
447       && !boost::asio::is_same<CurrentType, OtherType>::value
448   >::type>
449 {
450   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
451   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
452 
453   typedef ex_mq_mr<OtherType, CurrentType> result_type;
454 };
455 
456 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT)
457 
458 } // namespace traits
459 } // namespace asio
460 } // namespace boost
461 
462 template <typename CurrentType, typename OtherType>
463 struct ex_fq_fr
464 {
query(const ex_fq_fr &,CurrentType)465   friend CurrentType query(const ex_fq_fr&, CurrentType) BOOST_ASIO_NOEXCEPT
466   {
467     return CurrentType();
468   }
469 
query(const ex_fq_fr &,OtherType)470   friend CurrentType query(const ex_fq_fr&, OtherType) BOOST_ASIO_NOEXCEPT
471   {
472     return CurrentType();
473   }
474 
require(const ex_fq_fr &,CurrentType)475   friend ex_fq_fr<CurrentType, OtherType> require(
476       const ex_fq_fr&, CurrentType) BOOST_ASIO_NOEXCEPT
477   {
478     return ex_fq_fr<CurrentType, OtherType>();
479   }
480 
require(const ex_fq_fr &,OtherType)481   friend ex_fq_fr<OtherType, CurrentType> require(
482       const ex_fq_fr&, OtherType) BOOST_ASIO_NOEXCEPT
483   {
484     return ex_fq_fr<OtherType, CurrentType>();
485   }
486 
prefer(const ex_fq_fr &,CurrentType)487   friend ex_fq_fr<CurrentType, OtherType> prefer(
488       const ex_fq_fr&, CurrentType) BOOST_ASIO_NOEXCEPT
489   {
490     return ex_fq_fr<CurrentType, OtherType>();
491   }
492 
prefer(const ex_fq_fr &,OtherType)493   friend ex_fq_fr<OtherType, CurrentType> prefer(
494       const ex_fq_fr&, OtherType) BOOST_ASIO_NOEXCEPT
495   {
496     return ex_fq_fr<OtherType, CurrentType>();
497   }
498 
499   template <typename F>
executeex_fq_fr500   void execute(const F&) const
501   {
502   }
503 
operator ==(const ex_fq_fr &,const ex_fq_fr &)504   friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) BOOST_ASIO_NOEXCEPT
505   {
506     return true;
507   }
508 
operator !=(const ex_fq_fr &,const ex_fq_fr &)509   friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) BOOST_ASIO_NOEXCEPT
510   {
511     return false;
512   }
513 };
514 
515 template <typename CurrentType>
516 struct ex_fq_fr<CurrentType, CurrentType>
517 {
query(const ex_fq_fr &,CurrentType)518   friend CurrentType query(const ex_fq_fr&, CurrentType) BOOST_ASIO_NOEXCEPT
519   {
520     return CurrentType();
521   }
522 
require(const ex_fq_fr &,CurrentType)523   friend ex_fq_fr<CurrentType, CurrentType> require(
524       const ex_fq_fr&, CurrentType) BOOST_ASIO_NOEXCEPT
525   {
526     return ex_fq_fr<CurrentType, CurrentType>();
527   }
528 
prefer(const ex_fq_fr &,CurrentType)529   friend ex_fq_fr<CurrentType, CurrentType> prefer(
530       const ex_fq_fr&, CurrentType) BOOST_ASIO_NOEXCEPT
531   {
532     return ex_fq_fr<CurrentType, CurrentType>();
533   }
534 
535   template <typename F>
executeex_fq_fr536   void execute(const F&) const
537   {
538   }
539 
operator ==(const ex_fq_fr &,const ex_fq_fr &)540   friend bool operator==(const ex_fq_fr&, const ex_fq_fr&) BOOST_ASIO_NOEXCEPT
541   {
542     return true;
543   }
544 
operator !=(const ex_fq_fr &,const ex_fq_fr &)545   friend bool operator!=(const ex_fq_fr&, const ex_fq_fr&) BOOST_ASIO_NOEXCEPT
546   {
547     return false;
548   }
549 };
550 
551 namespace boost {
552 namespace asio {
553 namespace traits {
554 
555 #if !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
556 
557 template <typename CurrentType, typename OtherType>
558 struct equality_comparable<ex_fq_fr<CurrentType, OtherType> >
559 {
560   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
561   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
562 };
563 
564 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT)
565 
566 #if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
567 
568 template <typename CurrentType, typename OtherType, typename Function>
569 struct execute_member<ex_fq_fr<CurrentType, OtherType>, Function>
570 {
571   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
572   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = false);
573 
574   typedef void result_type;
575 };
576 
577 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT)
578 
579 #if !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
580 
581 template <typename CurrentType, typename OtherType, typename Param>
582 struct query_free<
583   ex_fq_fr<CurrentType, OtherType>, Param,
584   typename boost::asio::enable_if<
585     boost::asio::is_convertible<Param, CurrentType>::value
586       || boost::asio::is_convertible<Param, OtherType>::value
587   >::type>
588 {
589   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
590   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
591 
592   typedef CurrentType result_type;
593 };
594 
595 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_FREE_TRAIT)
596 
597 #if !defined(BOOST_ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
598 
599 template <typename CurrentType, typename OtherType, typename Param>
600 struct require_free<
601   ex_fq_fr<CurrentType, OtherType>, Param,
602   typename boost::asio::enable_if<
603     boost::asio::is_convertible<Param, CurrentType>::value
604   >::type>
605 {
606   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
607   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
608 
609   typedef ex_fq_fr<CurrentType, OtherType> result_type;
610 };
611 
612 template <typename CurrentType, typename OtherType, typename Param>
613 struct require_free<
614   ex_fq_fr<CurrentType, OtherType>, Param,
615   typename boost::asio::enable_if<
616     boost::asio::is_convertible<Param, OtherType>::value
617       && !boost::asio::is_same<CurrentType, OtherType>::value
618   >::type>
619 {
620   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
621   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
622 
623   typedef ex_fq_fr<OtherType, CurrentType> result_type;
624 };
625 
626 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_REQUIRE_FREE_TRAIT)
627 
628 #if !defined(BOOST_ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
629 
630 template <typename CurrentType, typename OtherType, typename Param>
631 struct prefer_free<
632   ex_fq_fr<CurrentType, OtherType>, Param,
633   typename boost::asio::enable_if<
634     boost::asio::is_convertible<Param, CurrentType>::value
635   >::type>
636 {
637   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
638   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
639 
640   typedef ex_fq_fr<CurrentType, OtherType> result_type;
641 };
642 
643 template <typename CurrentType, typename OtherType, typename Param>
644 struct prefer_free<
645   ex_fq_fr<CurrentType, OtherType>, Param,
646   typename boost::asio::enable_if<
647     boost::asio::is_convertible<Param, OtherType>::value
648       && !boost::asio::is_same<CurrentType, OtherType>::value
649   >::type>
650 {
651   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_valid = true);
652   BOOST_ASIO_STATIC_CONSTEXPR(bool, is_noexcept = true);
653 
654   typedef ex_fq_fr<OtherType, CurrentType> result_type;
655 };
656 
657 #endif // !defined(BOOST_ASIO_HAS_DEDUCED_PREFER_FREE_TRAIT)
658 
659 } // namespace traits
660 } // namespace asio
661 } // namespace boost
662 
663 template <typename Executor, typename Param, bool ExpectedResult>
test_can_query()664 void test_can_query()
665 {
666   BOOST_ASIO_CONSTEXPR bool b1 =
667     boost::asio::can_query<Executor, Param>::value;
668   BOOST_ASIO_CHECK(b1 == ExpectedResult);
669 
670   BOOST_ASIO_CONSTEXPR bool b2 =
671     boost::asio::can_query<const Executor, Param>::value;
672   BOOST_ASIO_CHECK(b2 == ExpectedResult);
673 
674   BOOST_ASIO_CONSTEXPR bool b3 =
675     boost::asio::can_query<Executor&, Param>::value;
676   BOOST_ASIO_CHECK(b3 == ExpectedResult);
677 
678   BOOST_ASIO_CONSTEXPR bool b4 =
679     boost::asio::can_query<const Executor&, Param>::value;
680   BOOST_ASIO_CHECK(b4 == ExpectedResult);
681 }
682 
683 template <typename Executor, typename Param, typename ExpectedResult>
test_query()684 void test_query()
685 {
686   exec::blocking_adaptation_t result1 = boost::asio::query(Executor(), Param());
687   BOOST_ASIO_CHECK(result1 == ExpectedResult());
688 
689   Executor ex1 = {};
690   exec::blocking_adaptation_t result2 = boost::asio::query(ex1, Param());
691   BOOST_ASIO_CHECK(result2 == ExpectedResult());
692 
693   const Executor ex2 = {};
694   exec::blocking_adaptation_t result3 = boost::asio::query(ex2, Param());
695   BOOST_ASIO_CHECK(result3 == ExpectedResult());
696 }
697 
698 template <typename Executor, typename Param, typename ExpectedResult>
test_constexpr_query()699 void test_constexpr_query()
700 {
701 #if defined(BOOST_ASIO_HAS_CONSTEXPR)
702   constexpr Executor ex1 = {};
703   constexpr exec::blocking_adaptation_t result1 = boost::asio::query(ex1, Param());
704   BOOST_ASIO_CHECK(result1 == ExpectedResult());
705 #endif // defined(BOOST_ASIO_HAS_CONSTEXPR)
706 }
707 
708 template <typename Executor, typename Param, bool ExpectedResult>
test_can_require()709 void test_can_require()
710 {
711   BOOST_ASIO_CONSTEXPR bool b1 =
712     boost::asio::can_require<Executor, Param>::value;
713   BOOST_ASIO_CHECK(b1 == ExpectedResult);
714 
715   BOOST_ASIO_CONSTEXPR bool b2 =
716     boost::asio::can_require<const Executor, Param>::value;
717   BOOST_ASIO_CHECK(b2 == ExpectedResult);
718 
719   BOOST_ASIO_CONSTEXPR bool b3 =
720     boost::asio::can_require<Executor&, Param>::value;
721   BOOST_ASIO_CHECK(b3 == ExpectedResult);
722 
723   BOOST_ASIO_CONSTEXPR bool b4 =
724     boost::asio::can_require<const Executor&, Param>::value;
725   BOOST_ASIO_CHECK(b4 == ExpectedResult);
726 }
727 
do_nothing()728 void do_nothing()
729 {
730 }
731 
732 template <typename Executor, typename Param, typename ExpectedResult>
test_require()733 void test_require()
734 {
735   BOOST_ASIO_CHECK(
736       boost::asio::query(
737         boost::asio::require(Executor(), Param()),
738         Param()) == ExpectedResult());
739 
740   Executor ex1 = {};
741 
742   BOOST_ASIO_CHECK(
743       boost::asio::query(
744         boost::asio::require(ex1, Param()),
745         Param()) == ExpectedResult());
746 
747   BOOST_ASIO_CHECK((
748       boost::asio::execution::is_executor<
749         typename boost::asio::decay<
750           typename boost::asio::require_result<Executor&, Param>::type
751         >::type
752       >::value));
753 
754   const Executor ex2 = {};
755 
756   BOOST_ASIO_CHECK(
757       boost::asio::query(
758         boost::asio::require(ex2, Param()),
759         Param()) == ExpectedResult());
760 
761   BOOST_ASIO_CHECK((
762       boost::asio::execution::is_executor<
763         typename boost::asio::decay<
764           typename boost::asio::require_result<const Executor&, Param>::type
765         >::type
766       >::value));
767 }
768 
769 template <typename Executor, typename Param, bool ExpectedResult>
test_can_prefer()770 void test_can_prefer()
771 {
772   BOOST_ASIO_CONSTEXPR bool b1 =
773     boost::asio::can_prefer<Executor, Param>::value;
774   BOOST_ASIO_CHECK(b1 == ExpectedResult);
775 
776   BOOST_ASIO_CONSTEXPR bool b2 =
777     boost::asio::can_prefer<const Executor, Param>::value;
778   BOOST_ASIO_CHECK(b2 == ExpectedResult);
779 
780   BOOST_ASIO_CONSTEXPR bool b3 =
781     boost::asio::can_prefer<Executor&, Param>::value;
782   BOOST_ASIO_CHECK(b3 == ExpectedResult);
783 
784   BOOST_ASIO_CONSTEXPR bool b4 =
785     boost::asio::can_prefer<const Executor&, Param>::value;
786   BOOST_ASIO_CHECK(b4 == ExpectedResult);
787 }
788 
789 template <typename Executor, typename Param, typename ExpectedResult>
test_prefer()790 void test_prefer()
791 {
792   BOOST_ASIO_CHECK(
793       s(boost::asio::query(
794         boost::asio::prefer(Executor(), Param()),
795           s())) == s(ExpectedResult()));
796 
797   Executor ex1 = {};
798   BOOST_ASIO_CHECK(
799       s(boost::asio::query(
800         boost::asio::prefer(ex1, Param()),
801           s())) == s(ExpectedResult()));
802 
803   const Executor ex2 = {};
804   BOOST_ASIO_CHECK(
805       s(boost::asio::query(
806         boost::asio::prefer(ex2, Param()),
807           s())) == s(ExpectedResult()));
808 }
809 
test_vars()810 void test_vars()
811 {
812   BOOST_ASIO_CHECK(s() == exec::blocking_adaptation);
813   BOOST_ASIO_CHECK(n1() == exec::blocking_adaptation.disallowed);
814   BOOST_ASIO_CHECK(n2() == exec::blocking_adaptation.allowed);
815 }
816 
817 BOOST_ASIO_TEST_SUITE
818 (
819   "blocking_adaptation",
820 
821   BOOST_ASIO_TEST_CASE3(test_can_query<ex_nq_nr, s, true>)
822   BOOST_ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n1, true>)
823   BOOST_ASIO_TEST_CASE3(test_can_query<ex_nq_nr, n2, false>)
824 
825   BOOST_ASIO_TEST_CASE3(test_query<ex_nq_nr, s, n1>)
826   BOOST_ASIO_TEST_CASE3(test_query<ex_nq_nr, n1, n1>)
827 
828   BOOST_ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, s, n1>)
829   BOOST_ASIO_TEST_CASE3(test_constexpr_query<ex_nq_nr, n1, n1>)
830 
831   BOOST_ASIO_TEST_CASE3(test_can_require<ex_nq_nr, s, false>)
832   BOOST_ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n1, true>)
833   BOOST_ASIO_TEST_CASE3(test_can_require<ex_nq_nr, n2, true>)
834 
835   BOOST_ASIO_TEST_CASE3(test_require<ex_nq_nr, n1, n1>)
836   BOOST_ASIO_TEST_CASE3(test_require<ex_nq_nr, n2, n2>)
837 
838   BOOST_ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, s, false>)
839   BOOST_ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n1, true>)
840   BOOST_ASIO_TEST_CASE3(test_can_prefer<ex_nq_nr, n2, false>)
841 
842   BOOST_ASIO_TEST_CASE3(test_prefer<ex_nq_nr, n1, n1>)
843 
844   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, s, true>)
845   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n1, true>)
846   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n1>, n2, true>)
847   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, s, true>)
848   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n1, true>)
849   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, s, n2>, n2, true>)
850   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, s, true>)
851   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n1, true>)
852   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n1>, n2, false>)
853   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, s, true>)
854   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n1, true>)
855   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n1, n2>, n2, false>)
856   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, s, true>)
857   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n1, false>)
858   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n1>, n2, true>)
859   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, s, true>)
860   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n1, false>)
861   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<s, n2, n2>, n2, true>)
862   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, s, true>)
863   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n1, true>)
864   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n1, s, n1>, n2, true>)
865   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, s, true>)
866   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n1, true>)
867   BOOST_ASIO_TEST_CASE5(test_can_query<ex_cq_nr<n2, s, n2>, n2, true>)
868 
869   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, s, n1>)
870   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n1, n1>)
871   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n1>, n2, n1>)
872   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, s, n2>)
873   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n1, n2>)
874   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, s, n2>, n2, n2>)
875   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, s, n1>)
876   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n1>, n1, n1>)
877   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, s, n2>)
878   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n1, n2>, n1, n2>)
879   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, s, n1>)
880   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n1>, n2, n1>)
881   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, s, n2>)
882   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<s, n2, n2>, n2, n2>)
883   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, s, n1>)
884   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n1, n1>)
885   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<n1, s, n1>, n2, n1>)
886   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, s, n2>)
887   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n1, n2>)
888   BOOST_ASIO_TEST_CASE5(test_query<ex_cq_nr<n2, s, n2>, n2, n2>)
889 
890   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, s, n1>)
891   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n1, n1>)
892   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n1>, n2, n1>)
893   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, s, n2>)
894   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n1, n2>)
895   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, s, n2>, n2, n2>)
896   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, s, n1>)
897   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n1>, n1, n1>)
898   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, s, n2>)
899   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n1, n2>, n1, n2>)
900   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, s, n1>)
901   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n1>, n2, n1>)
902   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, s, n2>)
903   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<s, n2, n2>, n2, n2>)
904   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, s, n1>)
905   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n1, n1>)
906   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n1, s, n1>, n2, n1>)
907   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, s, n2>)
908   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n1, n2>)
909   BOOST_ASIO_TEST_CASE5(test_constexpr_query<ex_cq_nr<n2, s, n2>, n2, n2>)
910 
911   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, s, false>)
912   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n1, true>)
913   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n1>, n2, true>)
914   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, s, false>)
915   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n1, false>)
916   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, s, n2>, n2, true>)
917   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, s, false>)
918   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n1, true>)
919   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n1>, n2, true>)
920   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, s, false>)
921   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n1, false>)
922   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n1, n2>, n2, true>)
923   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, s, false>)
924   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n1, false>)
925   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n1>, n2, true>)
926   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, s, false>)
927   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n1, false>)
928   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<s, n2, n2>, n2, true>)
929   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, s, false>)
930   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n1, true>)
931   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n1, s, n1>, n2, true>)
932   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, s, false>)
933   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n1, false>)
934   BOOST_ASIO_TEST_CASE5(test_can_require<ex_cq_nr<n2, s, n2>, n2, true>)
935 
936   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n1>, n1, n1>)
937   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n1>, n2, n2>)
938   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<s, s, n2>, n2, n2>)
939   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n1, n1>, n1, n1>)
940   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n1, n1>, n2, n2>)
941   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n1, n2>, n2, n2>)
942   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n2, n1>, n2, n2>)
943   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<s, n2, n2>, n2, n2>)
944   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<n1, s, n1>, n1, n1>)
945   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<n1, s, n1>, n2, n2>)
946   BOOST_ASIO_TEST_CASE5(test_require<ex_cq_nr<n2, s, n2>, n2, n2>)
947 
948   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, s, false>)
949   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n1, true>)
950   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n1>, n2, false>)
951   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, s, false>)
952   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n1, true>)
953   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, s, n2>, n2, false>)
954   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, s, false>)
955   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n1, true>)
956   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n1>, n2, false>)
957   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, s, false>)
958   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n1, true>)
959   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n1, n2>, n2, false>)
960   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, s, false>)
961   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n1, true>)
962   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n1>, n2, false>)
963   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, s, false>)
964   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n1, true>)
965   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<s, n2, n2>, n2, false>)
966   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, s, false>)
967   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n1, true>)
968   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n1, s, n1>, n2, false>)
969   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, s, false>)
970   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n1, true>)
971   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_cq_nr<n2, s, n2>, n2, false>)
972 
973   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n1>, n1, n1>)
974   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, s, n2>, n1, n2>)
975   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n1>, n1, n1>)
976   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n1, n2>, n1, n2>)
977   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n1>, n1, n1>)
978   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<s, n2, n2>, n1, n2>)
979   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n1, s, n1>, n1, n1>)
980   BOOST_ASIO_TEST_CASE5(test_prefer<ex_cq_nr<n2, s, n2>, n1, n2>)
981 
982   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, s, true>)
983   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n1, true>)
984   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n1>, n2, true>)
985   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, s, true>)
986   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n1, true>)
987   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, s, n2>, n2, true>)
988   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, s, true>)
989   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n1, true>)
990   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n1>, n2, false>)
991   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, s, true>)
992   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n1, true>)
993   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n1, n2>, n2, false>)
994   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, s, true>)
995   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n1, false>)
996   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n1>, n2, true>)
997   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, s, true>)
998   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n1, false>)
999   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<s, n2, n2>, n2, true>)
1000   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, s, true>)
1001   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n1, true>)
1002   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n1, s, n1>, n2, true>)
1003   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, s, true>)
1004   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n1, true>)
1005   BOOST_ASIO_TEST_CASE5(test_can_query<ex_mq_nr<n2, s, n2>, n2, true>)
1006 
1007   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, s, n1>)
1008   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n1, n1>)
1009   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n1>, n2, n1>)
1010   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, s, n2>)
1011   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n1, n2>)
1012   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, s, n2>, n2, n2>)
1013   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, s, n1>)
1014   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n1>, n1, n1>)
1015   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, s, n2>)
1016   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n1, n2>, n1, n2>)
1017   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, s, n1>)
1018   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n1>, n2, n1>)
1019   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, s, n2>)
1020   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<s, n2, n2>, n2, n2>)
1021   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, s, n1>)
1022   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n1, n1>)
1023   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<n1, s, n1>, n2, n1>)
1024   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, s, n2>)
1025   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n1, n2>)
1026   BOOST_ASIO_TEST_CASE5(test_query<ex_mq_nr<n2, s, n2>, n2, n2>)
1027 
1028   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, s, false>)
1029   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n1, false>)
1030   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n1>, n2, true>)
1031   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, s, false>)
1032   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n1, false>)
1033   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, s, n2>, n2, true>)
1034   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, s, false>)
1035   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n1, false>)
1036   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n1>, n2, true>)
1037   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, s, false>)
1038   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n1, false>)
1039   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n1, n2>, n2, true>)
1040   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, s, false>)
1041   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n1, false>)
1042   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n1>, n2, true>)
1043   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, s, false>)
1044   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n1, false>)
1045   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<s, n2, n2>, n2, true>)
1046   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, s, false>)
1047   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n1, false>)
1048   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n1, s, n1>, n2, true>)
1049   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, s, false>)
1050   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n1, false>)
1051   BOOST_ASIO_TEST_CASE5(test_can_require<ex_mq_nr<n2, s, n2>, n2, true>)
1052 
1053   BOOST_ASIO_TEST_CASE5(test_require<ex_mq_nr<s, s, n1>, n2, n2>)
1054   BOOST_ASIO_TEST_CASE5(test_require<ex_mq_nr<s, s, n2>, n2, n2>)
1055   BOOST_ASIO_TEST_CASE5(test_require<ex_mq_nr<s, n1, n1>, n2, n2>)
1056   BOOST_ASIO_TEST_CASE5(test_require<ex_mq_nr<s, n1, n2>, n2, n2>)
1057   BOOST_ASIO_TEST_CASE5(test_require<ex_mq_nr<s, n2, n1>, n2, n2>)
1058   BOOST_ASIO_TEST_CASE5(test_require<ex_mq_nr<s, n2, n2>, n2, n2>)
1059   BOOST_ASIO_TEST_CASE5(test_require<ex_mq_nr<n1, s, n1>, n2, n2>)
1060   BOOST_ASIO_TEST_CASE5(test_require<ex_mq_nr<n2, s, n2>, n2, n2>)
1061 
1062   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, s, false>)
1063   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n1, true>)
1064   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n1>, n2, false>)
1065   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, s, false>)
1066   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n1, true>)
1067   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, s, n2>, n2, false>)
1068   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, s, false>)
1069   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n1, true>)
1070   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n1>, n2, false>)
1071   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, s, false>)
1072   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n1, true>)
1073   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n1, n2>, n2, false>)
1074   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, s, false>)
1075   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n1, true>)
1076   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n1>, n2, false>)
1077   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, s, false>)
1078   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n1, true>)
1079   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<s, n2, n2>, n2, false>)
1080   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, s, false>)
1081   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n1, true>)
1082   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n1, s, n1>, n2, false>)
1083   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, s, false>)
1084   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n1, true>)
1085   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_mq_nr<n2, s, n2>, n2, false>)
1086 
1087   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n1>, n1, n1>)
1088   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, s, n2>, n1, n2>)
1089   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n1>, n1, n1>)
1090   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n1, n2>, n1, n2>)
1091   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n1>, n1, n1>)
1092   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<s, n2, n2>, n1, n2>)
1093   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n1, s, n1>, n1, n1>)
1094   BOOST_ASIO_TEST_CASE5(test_prefer<ex_mq_nr<n2, s, n2>, n1, n2>)
1095 
1096   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, s, true>)
1097   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n1, true>)
1098   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n1>, n2, true>)
1099   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, s, true>)
1100   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n1, true>)
1101   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, s, n2>, n2, true>)
1102   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, s, true>)
1103   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n1, true>)
1104   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n1>, n2, false>)
1105   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, s, true>)
1106   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n1, true>)
1107   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n1, n2>, n2, false>)
1108   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, s, true>)
1109   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n1, false>)
1110   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n1>, n2, true>)
1111   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, s, true>)
1112   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n1, false>)
1113   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<s, n2, n2>, n2, true>)
1114   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, s, true>)
1115   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n1, true>)
1116   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n1, s, n1>, n2, true>)
1117   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, s, true>)
1118   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n1, true>)
1119   BOOST_ASIO_TEST_CASE5(test_can_query<ex_fq_nr<n2, s, n2>, n2, true>)
1120 
1121   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, s, n1>)
1122   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n1, n1>)
1123   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n1>, n2, n1>)
1124   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, s, n2>)
1125   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n1, n2>)
1126   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, s, n2>, n2, n2>)
1127   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, s, n1>)
1128   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n1>, n1, n1>)
1129   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, s, n2>)
1130   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n1, n2>, n1, n2>)
1131   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, s, n1>)
1132   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n1>, n2, n1>)
1133   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, s, n2>)
1134   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<s, n2, n2>, n2, n2>)
1135   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, s, n1>)
1136   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n1, n1>)
1137   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<n1, s, n1>, n2, n1>)
1138   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, s, n2>)
1139   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n1, n2>)
1140   BOOST_ASIO_TEST_CASE5(test_query<ex_fq_nr<n2, s, n2>, n2, n2>)
1141 
1142   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, s, false>)
1143   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n1, false>)
1144   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n1>, n2, true>)
1145   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, s, false>)
1146   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n1, false>)
1147   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, s, n2>, n2, true>)
1148   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, s, false>)
1149   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n1, false>)
1150   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n1>, n2, true>)
1151   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, s, false>)
1152   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n1, false>)
1153   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n1, n2>, n2, true>)
1154   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, s, false>)
1155   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n1, false>)
1156   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n1>, n2, true>)
1157   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, s, false>)
1158   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n1, false>)
1159   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<s, n2, n2>, n2, true>)
1160   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, s, false>)
1161   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n1, false>)
1162   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n1, s, n1>, n2, true>)
1163   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, s, false>)
1164   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n1, false>)
1165   BOOST_ASIO_TEST_CASE5(test_can_require<ex_fq_nr<n2, s, n2>, n2, true>)
1166 
1167   BOOST_ASIO_TEST_CASE5(test_require<ex_fq_nr<s, s, n1>, n2, n2>)
1168   BOOST_ASIO_TEST_CASE5(test_require<ex_fq_nr<s, s, n2>, n2, n2>)
1169   BOOST_ASIO_TEST_CASE5(test_require<ex_fq_nr<s, n1, n1>, n2, n2>)
1170   BOOST_ASIO_TEST_CASE5(test_require<ex_fq_nr<s, n1, n2>, n2, n2>)
1171   BOOST_ASIO_TEST_CASE5(test_require<ex_fq_nr<s, n2, n1>, n2, n2>)
1172   BOOST_ASIO_TEST_CASE5(test_require<ex_fq_nr<s, n2, n2>, n2, n2>)
1173   BOOST_ASIO_TEST_CASE5(test_require<ex_fq_nr<n1, s, n1>, n2, n2>)
1174   BOOST_ASIO_TEST_CASE5(test_require<ex_fq_nr<n2, s, n2>, n2, n2>)
1175 
1176   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, s, false>)
1177   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n1, true>)
1178   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n1>, n2, false>)
1179   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, s, false>)
1180   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n1, true>)
1181   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, s, n2>, n2, false>)
1182   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, s, false>)
1183   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n1, true>)
1184   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n1>, n2, false>)
1185   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, s, false>)
1186   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n1, true>)
1187   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n1, n2>, n2, false>)
1188   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, s, false>)
1189   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n1, true>)
1190   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n1>, n2, false>)
1191   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, s, false>)
1192   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n1, true>)
1193   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<s, n2, n2>, n2, false>)
1194   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, s, false>)
1195   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n1, true>)
1196   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n1, s, n1>, n2, false>)
1197   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, s, false>)
1198   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n1, true>)
1199   BOOST_ASIO_TEST_CASE5(test_can_prefer<ex_fq_nr<n2, s, n2>, n2, false>)
1200 
1201   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n1>, n1, n1>)
1202   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, s, n2>, n1, n2>)
1203   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n1>, n1, n1>)
1204   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n1, n2>, n1, n2>)
1205   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n1>, n1, n1>)
1206   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<s, n2, n2>, n1, n2>)
1207   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n1, s, n1>, n1, n1>)
1208   BOOST_ASIO_TEST_CASE5(test_prefer<ex_fq_nr<n2, s, n2>, n1, n2>)
1209 
1210   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, s, true>)
1211   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n1, true>)
1212   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n1>, n2, false>)
1213   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, s, true>)
1214   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n1, true>)
1215   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n1, n2>, n2, true>)
1216   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, s, true>)
1217   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n1, true>)
1218   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n1>, n2, true>)
1219   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, s, true>)
1220   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n1, false>)
1221   BOOST_ASIO_TEST_CASE4(test_can_query<ex_mq_mr<n2, n2>, n2, true>)
1222 
1223   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, s, n1>)
1224   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n1>, n1, n1>)
1225   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, s, n1>)
1226   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n1, n2>, n1, n1>)
1227   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, s, n2>)
1228   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n1>, n2, n2>)
1229   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, s, n2>)
1230   BOOST_ASIO_TEST_CASE4(test_query<ex_mq_mr<n2, n2>, n2, n2>)
1231 
1232   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, s, false>)
1233   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n1, true>)
1234   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n1>, n2, true>)
1235   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, s, false>)
1236   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n1, true>)
1237   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n1, n2>, n2, true>)
1238   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, s, false>)
1239   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n1, true>)
1240   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n1>, n2, true>)
1241   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, s, false>)
1242   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n1, false>)
1243   BOOST_ASIO_TEST_CASE4(test_can_require<ex_mq_mr<n2, n2>, n2, true>)
1244 
1245   BOOST_ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n1>, n1, n1>)
1246   BOOST_ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n1>, n2, n2>)
1247   BOOST_ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n1, n1>)
1248   BOOST_ASIO_TEST_CASE4(test_require<ex_mq_mr<n1, n2>, n2, n2>)
1249   BOOST_ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n1, n1>)
1250   BOOST_ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n1>, n2, n2>)
1251   BOOST_ASIO_TEST_CASE4(test_require<ex_mq_mr<n2, n2>, n2, n2>)
1252 
1253   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, s, false>)
1254   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n1, true>)
1255   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n1>, n2, false>)
1256   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, s, false>)
1257   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n1, true>)
1258   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n1, n2>, n2, false>)
1259   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, s, false>)
1260   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n1, true>)
1261   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n1>, n2, false>)
1262   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, s, false>)
1263   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n1, true>)
1264   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_mq_mr<n2, n2>, n2, false>)
1265 
1266   BOOST_ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n1>, n1, n1>)
1267   BOOST_ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n1, n2>, n1, n1>)
1268   BOOST_ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n1>, n1, n1>)
1269   BOOST_ASIO_TEST_CASE4(test_prefer<ex_mq_mr<n2, n2>, n1, n2>)
1270 
1271   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, s, true>)
1272   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n1, true>)
1273   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n1>, n2, false>)
1274   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, s, true>)
1275   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n1, true>)
1276   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n1, n2>, n2, true>)
1277   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, s, true>)
1278   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n1, true>)
1279   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n1>, n2, true>)
1280   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, s, true>)
1281   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n1, false>)
1282   BOOST_ASIO_TEST_CASE4(test_can_query<ex_fq_fr<n2, n2>, n2, true>)
1283 
1284   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, s, n1>)
1285   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n1>, n1, n1>)
1286   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, s, n1>)
1287   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n1, n2>, n1, n1>)
1288   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, s, n2>)
1289   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n1>, n2, n2>)
1290   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, s, n2>)
1291   BOOST_ASIO_TEST_CASE4(test_query<ex_fq_fr<n2, n2>, n2, n2>)
1292 
1293   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, s, false>)
1294   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n1, true>)
1295   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n1>, n2, true>)
1296   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, s, false>)
1297   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n1, true>)
1298   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n1, n2>, n2, true>)
1299   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, s, false>)
1300   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n1, true>)
1301   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n1>, n2, true>)
1302   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, s, false>)
1303   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n1, false>)
1304   BOOST_ASIO_TEST_CASE4(test_can_require<ex_fq_fr<n2, n2>, n2, true>)
1305 
1306   BOOST_ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n1>, n1, n1>)
1307   BOOST_ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n1>, n2, n2>)
1308   BOOST_ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n1, n1>)
1309   BOOST_ASIO_TEST_CASE4(test_require<ex_fq_fr<n1, n2>, n2, n2>)
1310   BOOST_ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n1, n1>)
1311   BOOST_ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n1>, n2, n2>)
1312   BOOST_ASIO_TEST_CASE4(test_require<ex_fq_fr<n2, n2>, n2, n2>)
1313 
1314   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, s, false>)
1315   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n1, true>)
1316   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n1>, n2, false>)
1317   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, s, false>)
1318   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n1, true>)
1319   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n1, n2>, n2, false>)
1320   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, s, false>)
1321   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n1, true>)
1322   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n1>, n2, false>)
1323   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, s, false>)
1324   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n1, true>)
1325   BOOST_ASIO_TEST_CASE4(test_can_prefer<ex_fq_fr<n2, n2>, n2, false>)
1326 
1327   BOOST_ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n1>, n1, n1>)
1328   BOOST_ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n1, n2>, n1, n1>)
1329   BOOST_ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n1>, n1, n1>)
1330   BOOST_ASIO_TEST_CASE4(test_prefer<ex_fq_fr<n2, n2>, n1, n2>)
1331 
1332   BOOST_ASIO_TEST_CASE(test_vars)
1333 )
1334