@@ -359,6 +359,27 @@ struct reference : public allow_raw_pointers {};
359
359
360
360
namespace internal {
361
361
362
+ #if __cplusplus >= 201703L
363
+ template <typename ... Args> using conjunction = std::conjunction<Args...>;
364
+ template <typename ... Args> using disjunction = std::disjunction<Args...>;
365
+ #else
366
+ // Helper available in C++14.
367
+ template <bool _Test, class _T1 , class _T2 >
368
+ using conditional_t = typename std::conditional<_Test, _T1, _T2>::type;
369
+
370
+ template <class ...> struct conjunction : std::true_type {};
371
+ template <class B1 > struct conjunction <B1> : B1 {};
372
+ template <class B1 , class ... Bn>
373
+ struct conjunction <B1, Bn...>
374
+ : conditional_t <bool (B1::value), conjunction<Bn...>, B1> {};
375
+
376
+ template <class ...> struct disjunction : std::false_type {};
377
+ template <class B1 > struct disjunction <B1> : B1 {};
378
+ template <class B1 , class ... Bn>
379
+ struct disjunction <B1, Bn...>
380
+ : conditional_t <bool (B1::value), disjunction<Bn...>, B1> {};
381
+ #endif
382
+
362
383
template <typename ... Policies>
363
384
struct isPolicy ;
364
385
@@ -428,40 +449,10 @@ struct GetReturnValuePolicy<ReturnType, T, Rest...> {
428
449
};
429
450
430
451
template <typename ... Policies>
431
- struct isAsync ;
432
-
433
- template <typename ... Rest>
434
- struct isAsync <async, Rest...> {
435
- static constexpr bool value = true ;
436
- };
437
-
438
- template <typename T, typename ... Rest>
439
- struct isAsync <T, Rest...> {
440
- static constexpr bool value = isAsync<Rest...>::value;
441
- };
442
-
443
- template <>
444
- struct isAsync <> {
445
- static constexpr bool value = false ;
446
- };
452
+ using isAsync = disjunction<std::is_same<async, Policies>...>;
447
453
448
454
template <typename ... Policies>
449
- struct isNonnullReturn ;
450
-
451
- template <typename ... Rest>
452
- struct isNonnullReturn <nonnull<ret_val>, Rest...> {
453
- static constexpr bool value = true ;
454
- };
455
-
456
- template <typename T, typename ... Rest>
457
- struct isNonnullReturn <T, Rest...> {
458
- static constexpr bool value = isNonnullReturn<Rest...>::value;
459
- };
460
-
461
- template <>
462
- struct isNonnullReturn <> {
463
- static constexpr bool value = false ;
464
- };
455
+ using isNonnullReturn = disjunction<std::is_same<nonnull<ret_val>, Policies>...>;
465
456
466
457
}
467
458
@@ -985,18 +976,6 @@ struct SetterPolicy<PropertyTag<Setter, SetterArgumentType>> {
985
976
}
986
977
};
987
978
988
- // Helper available in C++14.
989
- template <bool _Test, class _T1 , class _T2 >
990
- using conditional_t = typename std::conditional<_Test, _T1, _T2>::type;
991
-
992
- // Conjunction is available in C++17
993
- template <class ...> struct conjunction : std::true_type {};
994
- template <class B1 > struct conjunction <B1> : B1 {};
995
- template <class B1 , class ... Bn>
996
- struct conjunction <B1, Bn...>
997
- : conditional_t <bool (B1::value), conjunction<Bn...>, B1> {};
998
-
999
-
1000
979
class noncopyable {
1001
980
protected:
1002
981
noncopyable () {}
0 commit comments