Use separate SFINAE parameters to minimise template instantiations.
diff --git a/asio/include/asio/execution/blocking.hpp b/asio/include/asio/execution/blocking.hpp
index 2f2c399..ebfa5c1 100644
--- a/asio/include/asio/execution/blocking.hpp
+++ b/asio/include/asio/execution/blocking.hpp
@@ -270,8 +270,12 @@
static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, blocking_t>::is_valid
- && !traits::query_member<T, blocking_t>::is_valid
- && traits::static_query<T, possibly_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, blocking_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, possibly_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, possibly_t>::value();
@@ -283,9 +287,15 @@
static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, blocking_t>::is_valid
- && !traits::query_member<T, blocking_t>::is_valid
- && !traits::static_query<T, possibly_t>::is_valid
- && traits::static_query<T, always_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, blocking_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::static_query<T, possibly_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, always_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, always_t>::value();
@@ -297,10 +307,18 @@
static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, blocking_t>::is_valid
- && !traits::query_member<T, blocking_t>::is_valid
- && !traits::static_query<T, possibly_t>::is_valid
- && !traits::static_query<T, always_t>::is_valid
- && traits::static_query<T, never_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, blocking_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::static_query<T, possibly_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::static_query<T, always_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, never_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, never_t>::value();
@@ -353,7 +371,9 @@
const Executor& ex, convertible_from_blocking_t,
typename enable_if<
!can_query<const Executor&, possibly_t>::value
- && can_query<const Executor&, always_t>::value
+ >::type* = 0,
+ typename enable_if<
+ can_query<const Executor&, always_t>::value
>::type* = 0)
#if !defined(__clang__) // Clang crashes if noexcept is used here.
#if defined(ASIO_MSVC) // Visual C++ wants the type to be qualified.
@@ -373,8 +393,12 @@
const Executor& ex, convertible_from_blocking_t,
typename enable_if<
!can_query<const Executor&, possibly_t>::value
- && !can_query<const Executor&, always_t>::value
- && can_query<const Executor&, never_t>::value
+ >::type* = 0,
+ typename enable_if<
+ !can_query<const Executor&, always_t>::value
+ >::type* = 0,
+ typename enable_if<
+ can_query<const Executor&, never_t>::value
>::type* = 0)
#if !defined(__clang__) // Clang crashes if noexcept is used here.
#if defined(ASIO_MSVC) // Visual C++ wants the type to be qualified.
@@ -468,10 +492,18 @@
static ASIO_CONSTEXPR possibly_t static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, possibly_t>::is_valid
- && !traits::query_member<T, possibly_t>::is_valid
- && !traits::query_free<T, possibly_t>::is_valid
- && !can_query<T, always_t<I> >::value
- && !can_query<T, never_t<I> >::value
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, possibly_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_free<T, possibly_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !can_query<T, always_t<I> >::value
+ >::type* = 0,
+ typename enable_if<
+ !can_query<T, never_t<I> >::value
>::type* = 0) ASIO_NOEXCEPT
{
return possibly_t();
@@ -755,7 +787,9 @@
const Executor& e, const always_t&,
typename enable_if<
is_executor<Executor>::value
- && traits::static_require<
+ >::type* = 0,
+ typename enable_if<
+ traits::static_require<
const Executor&,
blocking_adaptation::allowed_t<0>
>::is_valid
diff --git a/asio/include/asio/execution/blocking_adaptation.hpp b/asio/include/asio/execution/blocking_adaptation.hpp
index 49d364d..fee7717 100644
--- a/asio/include/asio/execution/blocking_adaptation.hpp
+++ b/asio/include/asio/execution/blocking_adaptation.hpp
@@ -225,8 +225,12 @@
typename enable_if<
!traits::query_static_constexpr_member<
T, blocking_adaptation_t>::is_valid
- && !traits::query_member<T, blocking_adaptation_t>::is_valid
- && traits::static_query<T, disallowed_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, blocking_adaptation_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, disallowed_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, disallowed_t>::value();
@@ -239,9 +243,15 @@
typename enable_if<
!traits::query_static_constexpr_member<
T, blocking_adaptation_t>::is_valid
- && !traits::query_member<T, blocking_adaptation_t>::is_valid
- && !traits::static_query<T, disallowed_t>::is_valid
- && traits::static_query<T, allowed_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, blocking_adaptation_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::static_query<T, disallowed_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, allowed_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, allowed_t>::value();
@@ -299,7 +309,9 @@
const Executor& ex, convertible_from_blocking_adaptation_t,
typename enable_if<
!can_query<const Executor&, disallowed_t>::value
- && can_query<const Executor&, allowed_t>::value
+ >::type* = 0,
+ typename enable_if<
+ can_query<const Executor&, allowed_t>::value
>::type* = 0)
#if !defined(__clang__) // Clang crashes if noexcept is used here.
#if defined(ASIO_MSVC) // Visual C++ wants the type to be qualified.
@@ -392,9 +404,15 @@
static ASIO_CONSTEXPR disallowed_t static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, disallowed_t>::is_valid
- && !traits::query_member<T, disallowed_t>::is_valid
- && !traits::query_free<T, disallowed_t>::is_valid
- && !can_query<T, allowed_t<I> >::value
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, disallowed_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_free<T, disallowed_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !can_query<T, allowed_t<I> >::value
>::type* = 0) ASIO_NOEXCEPT
{
return disallowed_t();
diff --git a/asio/include/asio/execution/bulk_execute.hpp b/asio/include/asio/execution/bulk_execute.hpp
index 001b608..d3a08dd 100644
--- a/asio/include/asio/execution/bulk_execute.hpp
+++ b/asio/include/asio/execution/bulk_execute.hpp
@@ -124,7 +124,8 @@
ill_formed
};
-template <typename S, typename Args, typename = void>
+template <typename S, typename Args, typename = void, typename = void,
+ typename = void, typename = void, typename = void, typename = void>
struct call_traits
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = ill_formed);
@@ -135,15 +136,15 @@
template <typename S, typename F, typename N>
struct call_traits<S, void(F, N),
typename enable_if<
- (
- is_convertible<N, std::size_t>::value
- &&
- bulk_execute_member<S, F, N>::is_valid
- &&
- is_sender<
- typename bulk_execute_member<S, F, N>::result_type
- >::value
- )
+ is_convertible<N, std::size_t>::value
+ >::type,
+ typename enable_if<
+ bulk_execute_member<S, F, N>::is_valid
+ >::type,
+ typename enable_if<
+ is_sender<
+ typename bulk_execute_member<S, F, N>::result_type
+ >::value
>::type> :
bulk_execute_member<S, F, N>
{
@@ -153,17 +154,18 @@
template <typename S, typename F, typename N>
struct call_traits<S, void(F, N),
typename enable_if<
- (
- is_convertible<N, std::size_t>::value
- &&
- !bulk_execute_member<S, F, N>::is_valid
- &&
- bulk_execute_free<S, F, N>::is_valid
- &&
- is_sender<
- typename bulk_execute_free<S, F, N>::result_type
- >::value
- )
+ is_convertible<N, std::size_t>::value
+ >::type,
+ typename enable_if<
+ !bulk_execute_member<S, F, N>::is_valid
+ >::type,
+ typename enable_if<
+ bulk_execute_free<S, F, N>::is_valid
+ >::type,
+ typename enable_if<
+ is_sender<
+ typename bulk_execute_free<S, F, N>::result_type
+ >::value
>::type> :
bulk_execute_free<S, F, N>
{
@@ -173,26 +175,29 @@
template <typename S, typename F, typename N>
struct call_traits<S, void(F, N),
typename enable_if<
- (
- is_convertible<N, std::size_t>::value
- &&
- !bulk_execute_member<S, F, N>::is_valid
- &&
- !bulk_execute_free<S, F, N>::is_valid
- &&
- is_sender<S>::value
- &&
- is_same<
- typename result_of<
- F(typename executor_index<typename remove_cvref<S>::type>::type)
- >::type,
- typename result_of<
- F(typename executor_index<typename remove_cvref<S>::type>::type)
- >::type
- >::value
- &&
- static_require<S, bulk_guarantee_t::unsequenced_t>::is_valid
- )
+ is_convertible<N, std::size_t>::value
+ >::type,
+ typename enable_if<
+ !bulk_execute_member<S, F, N>::is_valid
+ >::type,
+ typename enable_if<
+ !bulk_execute_free<S, F, N>::is_valid
+ >::type,
+ typename enable_if<
+ is_sender<S>::value
+ >::type,
+ typename enable_if<
+ is_same<
+ typename result_of<
+ F(typename executor_index<typename remove_cvref<S>::type>::type)
+ >::type,
+ typename result_of<
+ F(typename executor_index<typename remove_cvref<S>::type>::type)
+ >::type
+ >::value
+ >::type,
+ typename enable_if<
+ static_require<S, bulk_guarantee_t::unsequenced_t>::is_valid
>::type>
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = adapter);
diff --git a/asio/include/asio/execution/bulk_guarantee.hpp b/asio/include/asio/execution/bulk_guarantee.hpp
index 28b2585..158d350 100644
--- a/asio/include/asio/execution/bulk_guarantee.hpp
+++ b/asio/include/asio/execution/bulk_guarantee.hpp
@@ -259,8 +259,12 @@
static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, bulk_guarantee_t>::is_valid
- && !traits::query_member<T, bulk_guarantee_t>::is_valid
- && traits::static_query<T, unsequenced_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, bulk_guarantee_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, unsequenced_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, unsequenced_t>::value();
@@ -272,9 +276,15 @@
static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, bulk_guarantee_t>::is_valid
- && !traits::query_member<T, bulk_guarantee_t>::is_valid
- && !traits::static_query<T, unsequenced_t>::is_valid
- && traits::static_query<T, sequenced_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, bulk_guarantee_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::static_query<T, unsequenced_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, sequenced_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, sequenced_t>::value();
@@ -286,10 +296,18 @@
static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, bulk_guarantee_t>::is_valid
- && !traits::query_member<T, bulk_guarantee_t>::is_valid
- && !traits::static_query<T, unsequenced_t>::is_valid
- && !traits::static_query<T, sequenced_t>::is_valid
- && traits::static_query<T, parallel_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, bulk_guarantee_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::static_query<T, unsequenced_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::static_query<T, sequenced_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, parallel_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, parallel_t>::value();
@@ -344,7 +362,9 @@
const Executor& ex, convertible_from_bulk_guarantee_t,
typename enable_if<
!can_query<const Executor&, unsequenced_t>::value
- && can_query<const Executor&, sequenced_t>::value
+ >::type* = 0,
+ typename enable_if<
+ can_query<const Executor&, sequenced_t>::value
>::type* = 0)
#if !defined(__clang__) // Clang crashes if noexcept is used here.
#if defined(ASIO_MSVC) // Visual C++ wants the type to be qualified.
@@ -365,8 +385,12 @@
const Executor& ex, convertible_from_bulk_guarantee_t,
typename enable_if<
!can_query<const Executor&, unsequenced_t>::value
- && !can_query<const Executor&, sequenced_t>::value
- && can_query<const Executor&, parallel_t>::value
+ >::type* = 0,
+ typename enable_if<
+ !can_query<const Executor&, sequenced_t>::value
+ >::type* = 0,
+ typename enable_if<
+ can_query<const Executor&, parallel_t>::value
>::type* = 0)
#if !defined(__clang__) // Clang crashes if noexcept is used here.
#if defined(ASIO_MSVC) // Visual C++ wants the type to be qualified.
@@ -463,10 +487,18 @@
static ASIO_CONSTEXPR unsequenced_t static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, unsequenced_t>::is_valid
- && !traits::query_member<T, unsequenced_t>::is_valid
- && !traits::query_free<T, unsequenced_t>::is_valid
- && !can_query<T, sequenced_t<I> >::value
- && !can_query<T, parallel_t<I> >::value
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, unsequenced_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_free<T, unsequenced_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !can_query<T, sequenced_t<I> >::value
+ >::type* = 0,
+ typename enable_if<
+ !can_query<T, parallel_t<I> >::value
>::type* = 0) ASIO_NOEXCEPT
{
return unsequenced_t();
diff --git a/asio/include/asio/execution/connect.hpp b/asio/include/asio/execution/connect.hpp
index 47dd58b..17a924b 100644
--- a/asio/include/asio/execution/connect.hpp
+++ b/asio/include/asio/execution/connect.hpp
@@ -157,7 +157,8 @@
ill_formed
};
-template <typename S, typename R, typename = void>
+template <typename S, typename R, typename = void,
+ typename = void, typename = void, typename = void>
struct call_traits
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = ill_formed);
@@ -168,13 +169,13 @@
template <typename S, typename R>
struct call_traits<S, void(R),
typename enable_if<
- (
- connect_member<S, R>::is_valid
- &&
- is_operation_state<typename connect_member<S, R>::result_type>::value
- &&
- is_sender<typename remove_cvref<S>::type>::value
- )
+ connect_member<S, R>::is_valid
+ >::type,
+ typename enable_if<
+ is_operation_state<typename connect_member<S, R>::result_type>::value
+ >::type,
+ typename enable_if<
+ is_sender<typename remove_cvref<S>::type>::value
>::type> :
connect_member<S, R>
{
@@ -184,15 +185,16 @@
template <typename S, typename R>
struct call_traits<S, void(R),
typename enable_if<
- (
- !connect_member<S, R>::is_valid
- &&
- connect_free<S, R>::is_valid
- &&
- is_operation_state<typename connect_free<S, R>::result_type>::value
- &&
- is_sender<typename remove_cvref<S>::type>::value
- )
+ !connect_member<S, R>::is_valid
+ >::type,
+ typename enable_if<
+ connect_free<S, R>::is_valid
+ >::type,
+ typename enable_if<
+ is_operation_state<typename connect_free<S, R>::result_type>::value
+ >::type,
+ typename enable_if<
+ is_sender<typename remove_cvref<S>::type>::value
>::type> :
connect_free<S, R>
{
@@ -202,24 +204,25 @@
template <typename S, typename R>
struct call_traits<S, void(R),
typename enable_if<
- (
- !connect_member<S, R>::is_valid
- &&
- !connect_free<S, R>::is_valid
- &&
- is_receiver<R>::value
- &&
- conditional<
- !is_as_receiver<
- typename remove_cvref<R>::type
- >::value,
- is_executor_of<
- typename remove_cvref<S>::type,
- as_invocable<typename remove_cvref<R>::type, S>
- >,
- false_type
- >::type::value
- )
+ !connect_member<S, R>::is_valid
+ >::type,
+ typename enable_if<
+ !connect_free<S, R>::is_valid
+ >::type,
+ typename enable_if<
+ is_receiver<R>::value
+ >::type,
+ typename enable_if<
+ conditional<
+ !is_as_receiver<
+ typename remove_cvref<R>::type
+ >::value,
+ is_executor_of<
+ typename remove_cvref<S>::type,
+ as_invocable<typename remove_cvref<R>::type, S>
+ >,
+ false_type
+ >::type::value
>::type>
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = adapter);
diff --git a/asio/include/asio/execution/context_as.hpp b/asio/include/asio/execution/context_as.hpp
index b4a93a5..f39376c 100644
--- a/asio/include/asio/execution/context_as.hpp
+++ b/asio/include/asio/execution/context_as.hpp
@@ -120,7 +120,9 @@
const Executor& ex, const context_as_t<U>&,
typename enable_if<
is_same<T, U>::value
- && can_query<const Executor&, const context_t&>::value
+ >::type* = 0,
+ typename enable_if<
+ can_query<const Executor&, const context_t&>::value
>::type* = 0)
#if !defined(__clang__) // Clang crashes if noexcept is used here.
#if defined(ASIO_MSVC) // Visual C++ wants the type to be qualified.
diff --git a/asio/include/asio/execution/execute.hpp b/asio/include/asio/execution/execute.hpp
index 277cd18..483efbb 100644
--- a/asio/include/asio/execution/execute.hpp
+++ b/asio/include/asio/execution/execute.hpp
@@ -86,7 +86,6 @@
} // namespace asio
namespace asio_execution_execute_fn {
-using asio::conditional;
using asio::decay;
using asio::declval;
using asio::enable_if;
@@ -98,6 +97,7 @@
using asio::traits::execute_free;
using asio::traits::execute_member;
using asio::true_type;
+using asio::void_type;
void execute();
@@ -109,7 +109,8 @@
ill_formed
};
-template <typename T, typename F, typename = void>
+template <typename T, typename F, typename = void, typename = void,
+ typename = void, typename = void, typename = void>
struct call_traits
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = ill_formed);
@@ -118,9 +119,7 @@
template <typename T, typename F>
struct call_traits<T, void(F),
typename enable_if<
- (
execute_member<T, F>::is_valid
- )
>::type> :
execute_member<T, F>
{
@@ -130,11 +129,10 @@
template <typename T, typename F>
struct call_traits<T, void(F),
typename enable_if<
- (
- !execute_member<T, F>::is_valid
- &&
- execute_free<T, F>::is_valid
- )
+ !execute_member<T, F>::is_valid
+ >::type,
+ typename enable_if<
+ execute_free<T, F>::is_valid
>::type> :
execute_free<T, F>
{
@@ -144,26 +142,19 @@
template <typename T, typename F>
struct call_traits<T, void(F),
typename enable_if<
- (
- !execute_member<T, F>::is_valid
- &&
- !execute_free<T, F>::is_valid
- &&
- conditional<true, true_type,
- typename result_of<typename decay<F>::type&()>::type
- >::type::value
- &&
- conditional<
- !is_as_invocable<
- typename decay<F>::type
- >::value,
- is_sender_to<
- T,
- as_receiver<typename decay<F>::type, T>
- >,
- false_type
- >::type::value
- )
+ !execute_member<T, F>::is_valid
+ >::type,
+ typename enable_if<
+ !execute_free<T, F>::is_valid
+ >::type,
+ typename void_type<
+ typename result_of<typename decay<F>::type&()>::type
+ >::type,
+ typename enable_if<
+ !is_as_invocable<typename decay<F>::type>::value
+ >::type,
+ typename enable_if<
+ is_sender_to<T, as_receiver<typename decay<F>::type, T> >::value
>::type>
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = adapter);
diff --git a/asio/include/asio/execution/executor.hpp b/asio/include/asio/execution/executor.hpp
index fb64eba..6a9006b 100644
--- a/asio/include/asio/execution/executor.hpp
+++ b/asio/include/asio/execution/executor.hpp
@@ -35,34 +35,48 @@
namespace execution {
namespace detail {
-template <typename T, typename F>
-struct is_executor_of_impl_base :
- integral_constant<bool,
- conditional<true, true_type,
- typename result_of<typename decay<F>::type&()>::type
- >::type::value
- && is_constructible<typename decay<F>::type, F>::value
- && is_move_constructible<typename decay<F>::type>::value
-#if defined(ASIO_HAS_NOEXCEPT)
- && is_nothrow_copy_constructible<T>::value
- && is_nothrow_destructible<T>::value
-#else // defined(ASIO_HAS_NOEXCEPT)
- && is_copy_constructible<T>::value
- && is_destructible<T>::value
-#endif // defined(ASIO_HAS_NOEXCEPT)
- && traits::equality_comparable<T>::is_valid
- && traits::equality_comparable<T>::is_noexcept
- >
+template <typename T, typename F,
+ typename = void, typename = void, typename = void, typename = void,
+ typename = void, typename = void, typename = void, typename = void>
+struct is_executor_of_impl : false_type
{
};
template <typename T, typename F>
-struct is_executor_of_impl :
- conditional<
- can_execute<typename add_const<T>::type, F>::value,
- is_executor_of_impl_base<T, F>,
- false_type
- >::type
+struct is_executor_of_impl<T, F,
+ typename enable_if<
+ can_execute<typename add_const<T>::type, F>::value
+ >::type,
+ typename void_type<
+ typename result_of<typename decay<F>::type&()>::type
+ >::type,
+ typename enable_if<
+ is_constructible<typename decay<F>::type, F>::value
+ >::type,
+ typename enable_if<
+ is_move_constructible<typename decay<F>::type>::value
+ >::type,
+#if defined(ASIO_HAS_NOEXCEPT)
+ typename enable_if<
+ is_nothrow_copy_constructible<T>::value
+ >::type,
+ typename enable_if<
+ is_nothrow_destructible<T>::value
+ >::type,
+#else // defined(ASIO_HAS_NOEXCEPT)
+ typename enable_if<
+ is_copy_constructible<T>::value
+ >::type,
+ typename enable_if<
+ is_destructible<T>::value
+ >::type,
+#endif // defined(ASIO_HAS_NOEXCEPT)
+ typename enable_if<
+ traits::equality_comparable<T>::is_valid
+ >::type,
+ typename enable_if<
+ traits::equality_comparable<T>::is_noexcept
+ >::type> : true_type
{
};
diff --git a/asio/include/asio/execution/mapping.hpp b/asio/include/asio/execution/mapping.hpp
index 43a2733..205d814 100644
--- a/asio/include/asio/execution/mapping.hpp
+++ b/asio/include/asio/execution/mapping.hpp
@@ -254,8 +254,12 @@
static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, mapping_t>::is_valid
- && !traits::query_member<T, mapping_t>::is_valid
- && traits::static_query<T, thread_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, mapping_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, thread_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, thread_t>::value();
@@ -267,9 +271,15 @@
static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, mapping_t>::is_valid
- && !traits::query_member<T, mapping_t>::is_valid
- && !traits::static_query<T, thread_t>::is_valid
- && traits::static_query<T, new_thread_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, mapping_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::static_query<T, thread_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, new_thread_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, new_thread_t>::value();
@@ -281,10 +291,18 @@
static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, mapping_t>::is_valid
- && !traits::query_member<T, mapping_t>::is_valid
- && !traits::static_query<T, thread_t>::is_valid
- && !traits::static_query<T, new_thread_t>::is_valid
- && traits::static_query<T, other_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, mapping_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::static_query<T, thread_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::static_query<T, new_thread_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, other_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, other_t>::value();
@@ -337,7 +355,9 @@
const Executor& ex, convertible_from_mapping_t,
typename enable_if<
!can_query<const Executor&, thread_t>::value
- && can_query<const Executor&, new_thread_t>::value
+ >::type* = 0,
+ typename enable_if<
+ can_query<const Executor&, new_thread_t>::value
>::type* = 0)
#if !defined(__clang__) // Clang crashes if noexcept is used here.
#if defined(ASIO_MSVC) // Visual C++ wants the type to be qualified.
@@ -357,8 +377,12 @@
const Executor& ex, convertible_from_mapping_t,
typename enable_if<
!can_query<const Executor&, thread_t>::value
- && !can_query<const Executor&, new_thread_t>::value
- && can_query<const Executor&, other_t>::value
+ >::type* = 0,
+ typename enable_if<
+ !can_query<const Executor&, new_thread_t>::value
+ >::type* = 0,
+ typename enable_if<
+ can_query<const Executor&, other_t>::value
>::type* = 0)
#if !defined(__clang__) // Clang crashes if noexcept is used here.
#if defined(ASIO_MSVC) // Visual C++ wants the type to be qualified.
@@ -452,10 +476,18 @@
static ASIO_CONSTEXPR thread_t static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, thread_t>::is_valid
- && !traits::query_member<T, thread_t>::is_valid
- && !traits::query_free<T, thread_t>::is_valid
- && !can_query<T, new_thread_t<I> >::value
- && !can_query<T, other_t<I> >::value
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, thread_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_free<T, thread_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !can_query<T, new_thread_t<I> >::value
+ >::type* = 0,
+ typename enable_if<
+ !can_query<T, other_t<I> >::value
>::type* = 0) ASIO_NOEXCEPT
{
return thread_t();
diff --git a/asio/include/asio/execution/outstanding_work.hpp b/asio/include/asio/execution/outstanding_work.hpp
index da58547..edb9c0b 100644
--- a/asio/include/asio/execution/outstanding_work.hpp
+++ b/asio/include/asio/execution/outstanding_work.hpp
@@ -219,8 +219,12 @@
typename enable_if<
!traits::query_static_constexpr_member<
T, outstanding_work_t>::is_valid
- && !traits::query_member<T, outstanding_work_t>::is_valid
- && traits::static_query<T, untracked_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, outstanding_work_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, untracked_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, untracked_t>::value();
@@ -233,9 +237,15 @@
typename enable_if<
!traits::query_static_constexpr_member<
T, outstanding_work_t>::is_valid
- && !traits::query_member<T, outstanding_work_t>::is_valid
- && !traits::static_query<T, untracked_t>::is_valid
- && traits::static_query<T, tracked_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, outstanding_work_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::static_query<T, untracked_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, tracked_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, tracked_t>::value();
@@ -292,7 +302,9 @@
const Executor& ex, convertible_from_outstanding_work_t,
typename enable_if<
!can_query<const Executor&, untracked_t>::value
- && can_query<const Executor&, tracked_t>::value
+ >::type* = 0,
+ typename enable_if<
+ can_query<const Executor&, tracked_t>::value
>::type* = 0)
#if !defined(__clang__) // Clang crashes if noexcept is used here.
#if defined(ASIO_MSVC) // Visual C++ wants the type to be qualified.
@@ -385,9 +397,15 @@
static ASIO_CONSTEXPR untracked_t static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, untracked_t>::is_valid
- && !traits::query_member<T, untracked_t>::is_valid
- && !traits::query_free<T, untracked_t>::is_valid
- && !can_query<T, tracked_t<I> >::value
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, untracked_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_free<T, untracked_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !can_query<T, tracked_t<I> >::value
>::type* = 0) ASIO_NOEXCEPT
{
return untracked_t();
diff --git a/asio/include/asio/execution/prefer_only.hpp b/asio/include/asio/execution/prefer_only.hpp
index 9823dad..d9b78a5 100644
--- a/asio/include/asio/execution/prefer_only.hpp
+++ b/asio/include/asio/execution/prefer_only.hpp
@@ -92,7 +92,7 @@
polymorphic_query_result_type;
};
-template <typename InnerProperty, typename = void>
+template <typename InnerProperty, typename = void, typename = void>
struct prefer_only_property
{
InnerProperty property;
@@ -160,8 +160,12 @@
struct prefer_only_property<InnerProperty,
typename enable_if<
sizeof(prefer_only_value_memfn_helper<InnerProperty>(0)) != 1
- && !is_same<typename InnerProperty::polymorphic_query_result_type,
- void>::value
+ >::type,
+ typename enable_if<
+ !is_same<
+ typename InnerProperty::polymorphic_query_result_type,
+ void
+ >::value
>::type>
{
InnerProperty property;
@@ -220,7 +224,9 @@
prefer(const Executor& ex, const prefer_only<Property>& p,
typename enable_if<
is_same<Property, InnerProperty>::value
- && can_prefer<const Executor&, const InnerProperty&>::value
+ >::type* = 0,
+ typename enable_if<
+ can_prefer<const Executor&, const InnerProperty&>::value
>::type* = 0)
#if !defined(ASIO_MSVC) \
&& !defined(__clang__) // Clang crashes if noexcept is used here.
@@ -238,7 +244,9 @@
query(const Executor& ex, const prefer_only<Property>& p,
typename enable_if<
is_same<Property, InnerProperty>::value
- && can_query<const Executor&, const InnerProperty&>::value
+ >::type* = 0,
+ typename enable_if<
+ can_query<const Executor&, const InnerProperty&>::value
>::type* = 0)
#if !defined(ASIO_MSVC) \
&& !defined(__clang__) // Clang crashes if noexcept is used here.
diff --git a/asio/include/asio/execution/relationship.hpp b/asio/include/asio/execution/relationship.hpp
index 35f0749..fff8d38 100644
--- a/asio/include/asio/execution/relationship.hpp
+++ b/asio/include/asio/execution/relationship.hpp
@@ -218,8 +218,12 @@
typename enable_if<
!traits::query_static_constexpr_member<
T, relationship_t>::is_valid
- && !traits::query_member<T, relationship_t>::is_valid
- && traits::static_query<T, fork_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, relationship_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, fork_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, fork_t>::value();
@@ -232,9 +236,15 @@
typename enable_if<
!traits::query_static_constexpr_member<
T, relationship_t>::is_valid
- && !traits::query_member<T, relationship_t>::is_valid
- && !traits::static_query<T, fork_t>::is_valid
- && traits::static_query<T, continuation_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, relationship_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::static_query<T, fork_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ traits::static_query<T, continuation_t>::is_valid
>::type* = 0) ASIO_NOEXCEPT
{
return traits::static_query<T, continuation_t>::value();
@@ -290,7 +300,9 @@
const Executor& ex, convertible_from_relationship_t,
typename enable_if<
!can_query<const Executor&, fork_t>::value
- && can_query<const Executor&, continuation_t>::value
+ >::type* = 0,
+ typename enable_if<
+ can_query<const Executor&, continuation_t>::value
>::type* = 0)
#if !defined(__clang__) // Clang crashes if noexcept is used here.
#if defined(ASIO_MSVC) // Visual C++ wants the type to be qualified.
@@ -383,9 +395,15 @@
static ASIO_CONSTEXPR fork_t static_query(
typename enable_if<
!traits::query_static_constexpr_member<T, fork_t>::is_valid
- && !traits::query_member<T, fork_t>::is_valid
- && !traits::query_free<T, fork_t>::is_valid
- && !can_query<T, continuation_t<I> >::value
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_member<T, fork_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !traits::query_free<T, fork_t>::is_valid
+ >::type* = 0,
+ typename enable_if<
+ !can_query<T, continuation_t<I> >::value
>::type* = 0) ASIO_NOEXCEPT
{
return fork_t();
diff --git a/asio/include/asio/execution/schedule.hpp b/asio/include/asio/execution/schedule.hpp
index 1262735..95ecc9f 100644
--- a/asio/include/asio/execution/schedule.hpp
+++ b/asio/include/asio/execution/schedule.hpp
@@ -86,7 +86,7 @@
ill_formed
};
-template <typename S, typename = void>
+template <typename S, typename = void, typename = void, typename = void>
struct call_traits
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = ill_formed);
@@ -97,9 +97,7 @@
template <typename S>
struct call_traits<S,
typename enable_if<
- (
- schedule_member<S>::is_valid
- )
+ schedule_member<S>::is_valid
>::type> :
schedule_member<S>
{
@@ -109,11 +107,10 @@
template <typename S>
struct call_traits<S,
typename enable_if<
- (
- !schedule_member<S>::is_valid
- &&
- schedule_free<S>::is_valid
- )
+ !schedule_member<S>::is_valid
+ >::type,
+ typename enable_if<
+ schedule_free<S>::is_valid
>::type> :
schedule_free<S>
{
@@ -123,13 +120,13 @@
template <typename S>
struct call_traits<S,
typename enable_if<
- (
- !schedule_member<S>::is_valid
- &&
- !schedule_free<S>::is_valid
- &&
- is_executor<typename decay<S>::type>::value
- )
+ !schedule_member<S>::is_valid
+ >::type,
+ typename enable_if<
+ !schedule_free<S>::is_valid
+ >::type,
+ typename enable_if<
+ is_executor<typename decay<S>::type>::value
>::type>
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = identity);
diff --git a/asio/include/asio/execution/set_done.hpp b/asio/include/asio/execution/set_done.hpp
index 5b45b7e..1ec0d55 100644
--- a/asio/include/asio/execution/set_done.hpp
+++ b/asio/include/asio/execution/set_done.hpp
@@ -83,7 +83,7 @@
ill_formed
};
-template <typename R, typename = void>
+template <typename R, typename = void, typename = void>
struct call_traits
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = ill_formed);
@@ -94,9 +94,7 @@
template <typename R>
struct call_traits<R,
typename enable_if<
- (
- set_done_member<R>::is_valid
- )
+ set_done_member<R>::is_valid
>::type> :
set_done_member<R>
{
@@ -106,11 +104,10 @@
template <typename R>
struct call_traits<R,
typename enable_if<
- (
- !set_done_member<R>::is_valid
- &&
- set_done_free<R>::is_valid
- )
+ !set_done_member<R>::is_valid
+ >::type,
+ typename enable_if<
+ set_done_free<R>::is_valid
>::type> :
set_done_free<R>
{
diff --git a/asio/include/asio/execution/set_error.hpp b/asio/include/asio/execution/set_error.hpp
index aa70146..f09fded 100644
--- a/asio/include/asio/execution/set_error.hpp
+++ b/asio/include/asio/execution/set_error.hpp
@@ -83,7 +83,7 @@
ill_formed
};
-template <typename R, typename E, typename = void>
+template <typename R, typename E, typename = void, typename = void>
struct call_traits
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = ill_formed);
@@ -94,9 +94,7 @@
template <typename R, typename E>
struct call_traits<R, void(E),
typename enable_if<
- (
- set_error_member<R, E>::is_valid
- )
+ set_error_member<R, E>::is_valid
>::type> :
set_error_member<R, E>
{
@@ -106,11 +104,10 @@
template <typename R, typename E>
struct call_traits<R, void(E),
typename enable_if<
- (
- !set_error_member<R, E>::is_valid
- &&
- set_error_free<R, E>::is_valid
- )
+ !set_error_member<R, E>::is_valid
+ >::type,
+ typename enable_if<
+ set_error_free<R, E>::is_valid
>::type> :
set_error_free<R, E>
{
diff --git a/asio/include/asio/execution/set_value.hpp b/asio/include/asio/execution/set_value.hpp
index f42b19d..a6834b8 100644
--- a/asio/include/asio/execution/set_value.hpp
+++ b/asio/include/asio/execution/set_value.hpp
@@ -86,7 +86,7 @@
ill_formed
};
-template <typename R, typename Vs, typename = void>
+template <typename R, typename Vs, typename = void, typename = void>
struct call_traits
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = ill_formed);
@@ -97,9 +97,7 @@
template <typename R, typename Vs>
struct call_traits<R, Vs,
typename enable_if<
- (
- set_value_member<R, Vs>::is_valid
- )
+ set_value_member<R, Vs>::is_valid
>::type> :
set_value_member<R, Vs>
{
@@ -109,11 +107,10 @@
template <typename R, typename Vs>
struct call_traits<R, Vs,
typename enable_if<
- (
- !set_value_member<R, Vs>::is_valid
- &&
- set_value_free<R, Vs>::is_valid
- )
+ !set_value_member<R, Vs>::is_valid
+ >::type,
+ typename enable_if<
+ set_value_free<R, Vs>::is_valid
>::type> :
set_value_free<R, Vs>
{
diff --git a/asio/include/asio/execution/start.hpp b/asio/include/asio/execution/start.hpp
index 194be14..49e3d1c 100644
--- a/asio/include/asio/execution/start.hpp
+++ b/asio/include/asio/execution/start.hpp
@@ -80,7 +80,7 @@
ill_formed
};
-template <typename R, typename = void>
+template <typename R, typename = void, typename = void>
struct call_traits
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = ill_formed);
@@ -91,9 +91,7 @@
template <typename R>
struct call_traits<R,
typename enable_if<
- (
- start_member<R>::is_valid
- )
+ start_member<R>::is_valid
>::type> :
start_member<R>
{
@@ -103,11 +101,10 @@
template <typename R>
struct call_traits<R,
typename enable_if<
- (
- !start_member<R>::is_valid
- &&
- start_free<R>::is_valid
- )
+ !start_member<R>::is_valid
+ >::type,
+ typename enable_if<
+ start_free<R>::is_valid
>::type> :
start_free<R>
{
diff --git a/asio/include/asio/execution/submit.hpp b/asio/include/asio/execution/submit.hpp
index 719d27e..39c05e9 100644
--- a/asio/include/asio/execution/submit.hpp
+++ b/asio/include/asio/execution/submit.hpp
@@ -125,7 +125,8 @@
ill_formed
};
-template <typename S, typename R, typename = void>
+template <typename S, typename R, typename = void,
+ typename = void, typename = void>
struct call_traits
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = ill_formed);
@@ -136,11 +137,10 @@
template <typename S, typename R>
struct call_traits<S, void(R),
typename enable_if<
- (
- submit_member<S, R>::is_valid
- &&
- is_sender_to<S, R>::value
- )
+ submit_member<S, R>::is_valid
+ >::type,
+ typename enable_if<
+ is_sender_to<S, R>::value
>::type> :
submit_member<S, R>
{
@@ -150,13 +150,13 @@
template <typename S, typename R>
struct call_traits<S, void(R),
typename enable_if<
- (
- !submit_member<S, R>::is_valid
- &&
- submit_free<S, R>::is_valid
- &&
- is_sender_to<S, R>::value
- )
+ !submit_member<S, R>::is_valid
+ >::type,
+ typename enable_if<
+ submit_free<S, R>::is_valid
+ >::type,
+ typename enable_if<
+ is_sender_to<S, R>::value
>::type> :
submit_free<S, R>
{
@@ -166,13 +166,13 @@
template <typename S, typename R>
struct call_traits<S, void(R),
typename enable_if<
- (
- !submit_member<S, R>::is_valid
- &&
- !submit_free<S, R>::is_valid
- &&
- is_sender_to<S, R>::value
- )
+ !submit_member<S, R>::is_valid
+ >::type,
+ typename enable_if<
+ !submit_free<S, R>::is_valid
+ >::type,
+ typename enable_if<
+ is_sender_to<S, R>::value
>::type>
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = adapter);
diff --git a/asio/include/asio/prefer.hpp b/asio/include/asio/prefer.hpp
index b885ab4..9936f6d 100644
--- a/asio/include/asio/prefer.hpp
+++ b/asio/include/asio/prefer.hpp
@@ -143,7 +143,9 @@
ill_formed
};
-template <typename T, typename Properties, typename = void>
+template <typename T, typename Properties, typename = void,
+ typename = void, typename = void, typename = void,
+ typename = void, typename = void, typename = void>
struct call_traits
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = ill_formed);
@@ -154,16 +156,16 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- decay<Property>::type::is_preferable
- &&
- static_require<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ decay<Property>::type::is_preferable
+ >::type,
+ typename enable_if<
+ static_require<T, Property>::is_valid
>::type>
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = identity);
@@ -179,18 +181,19 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- decay<Property>::type::is_preferable
- &&
- !static_require<T, Property>::is_valid
- &&
- require_member<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ decay<Property>::type::is_preferable
+ >::type,
+ typename enable_if<
+ !static_require<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ require_member<T, Property>::is_valid
>::type> :
require_member<T, Property>
{
@@ -200,20 +203,22 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- decay<Property>::type::is_preferable
- &&
- !static_require<T, Property>::is_valid
- &&
- !require_member<T, Property>::is_valid
- &&
- require_free<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ decay<Property>::type::is_preferable
+ >::type,
+ typename enable_if<
+ !static_require<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ !require_member<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ require_free<T, Property>::is_valid
>::type> :
require_free<T, Property>
{
@@ -223,22 +228,25 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- decay<Property>::type::is_preferable
- &&
- !static_require<T, Property>::is_valid
- &&
- !require_member<T, Property>::is_valid
- &&
- !require_free<T, Property>::is_valid
- &&
- prefer_member<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ decay<Property>::type::is_preferable
+ >::type,
+ typename enable_if<
+ !static_require<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ !require_member<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ !require_free<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ prefer_member<T, Property>::is_valid
>::type> :
prefer_member<T, Property>
{
@@ -248,24 +256,28 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- decay<Property>::type::is_preferable
- &&
- !static_require<T, Property>::is_valid
- &&
- !require_member<T, Property>::is_valid
- &&
- !require_free<T, Property>::is_valid
- &&
- !prefer_member<T, Property>::is_valid
- &&
- prefer_free<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ decay<Property>::type::is_preferable
+ >::type,
+ typename enable_if<
+ !static_require<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ !require_member<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ !require_free<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ !prefer_member<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ prefer_free<T, Property>::is_valid
>::type> :
prefer_free<T, Property>
{
@@ -275,24 +287,28 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- decay<Property>::type::is_preferable
- &&
- !static_require<T, Property>::is_valid
- &&
- !require_member<T, Property>::is_valid
- &&
- !require_free<T, Property>::is_valid
- &&
- !prefer_member<T, Property>::is_valid
- &&
- !prefer_free<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ decay<Property>::type::is_preferable
+ >::type,
+ typename enable_if<
+ !static_require<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ !require_member<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ !require_free<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ !prefer_member<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ !prefer_free<T, Property>::is_valid
>::type>
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = identity);
@@ -309,7 +325,8 @@
struct call_traits<T, void(P0, P1),
typename enable_if<
call_traits<T, void(P0)>::overload != ill_formed
- &&
+ >::type,
+ typename enable_if<
call_traits<
typename call_traits<T, void(P0)>::result_type,
void(P1)
@@ -340,7 +357,8 @@
struct call_traits<T, void(P0, P1, PN ASIO_ELLIPSIS),
typename enable_if<
call_traits<T, void(P0)>::overload != ill_formed
- &&
+ >::type,
+ typename enable_if<
call_traits<
typename call_traits<T, void(P0)>::result_type,
void(P1, PN ASIO_ELLIPSIS)
diff --git a/asio/include/asio/query.hpp b/asio/include/asio/query.hpp
index 501b019..39206bc 100644
--- a/asio/include/asio/query.hpp
+++ b/asio/include/asio/query.hpp
@@ -118,7 +118,8 @@
ill_formed
};
-template <typename T, typename Properties, typename = void>
+template <typename T, typename Properties, typename = void,
+ typename = void, typename = void, typename = void>
struct call_traits
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = ill_formed);
@@ -129,14 +130,13 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- static_query<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ static_query<T, Property>::is_valid
>::type> :
static_query<T, Property>
{
@@ -146,16 +146,16 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- !static_query<T, Property>::is_valid
- &&
- query_member<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ !static_query<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ query_member<T, Property>::is_valid
>::type> :
query_member<T, Property>
{
@@ -165,18 +165,19 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- !static_query<T, Property>::is_valid
- &&
- !query_member<T, Property>::is_valid
- &&
- query_free<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ !static_query<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ !query_member<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ query_free<T, Property>::is_valid
>::type> :
query_free<T, Property>
{
diff --git a/asio/include/asio/require.hpp b/asio/include/asio/require.hpp
index 6114e6b..8e4f586 100644
--- a/asio/include/asio/require.hpp
+++ b/asio/include/asio/require.hpp
@@ -127,7 +127,8 @@
ill_formed
};
-template <typename T, typename Properties, typename = void>
+template <typename T, typename Properties, typename = void,
+ typename = void, typename = void, typename = void, typename = void>
struct call_traits
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = ill_formed);
@@ -138,16 +139,16 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- decay<Property>::type::is_requirable
- &&
- static_require<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ decay<Property>::type::is_requirable
+ >::type,
+ typename enable_if<
+ static_require<T, Property>::is_valid
>::type>
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = identity);
@@ -163,18 +164,19 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- decay<Property>::type::is_requirable
- &&
- !static_require<T, Property>::is_valid
- &&
- require_member<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ decay<Property>::type::is_requirable
+ >::type,
+ typename enable_if<
+ !static_require<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ require_member<T, Property>::is_valid
>::type> :
require_member<T, Property>
{
@@ -184,20 +186,22 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- decay<Property>::type::is_requirable
- &&
- !static_require<T, Property>::is_valid
- &&
- !require_member<T, Property>::is_valid
- &&
- require_free<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ decay<Property>::type::is_requirable
+ >::type,
+ typename enable_if<
+ !static_require<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ !require_member<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ require_free<T, Property>::is_valid
>::type> :
require_free<T, Property>
{
@@ -208,7 +212,8 @@
struct call_traits<T, void(P0, P1),
typename enable_if<
call_traits<T, void(P0)>::overload != ill_formed
- &&
+ >::type,
+ typename enable_if<
call_traits<
typename call_traits<T, void(P0)>::result_type,
void(P1)
@@ -239,7 +244,8 @@
struct call_traits<T, void(P0, P1, PN ASIO_ELLIPSIS),
typename enable_if<
call_traits<T, void(P0)>::overload != ill_formed
- &&
+ >::type,
+ typename enable_if<
call_traits<
typename call_traits<T, void(P0)>::result_type,
void(P1, PN ASIO_ELLIPSIS)
diff --git a/asio/include/asio/require_concept.hpp b/asio/include/asio/require_concept.hpp
index d8785f6..a244037 100644
--- a/asio/include/asio/require_concept.hpp
+++ b/asio/include/asio/require_concept.hpp
@@ -125,7 +125,8 @@
ill_formed
};
-template <typename T, typename Properties, typename = void>
+template <typename T, typename Properties, typename = void,
+ typename = void, typename = void, typename = void, typename = void>
struct call_traits
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = ill_formed);
@@ -136,16 +137,16 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- decay<Property>::type::is_requirable_concept
- &&
- static_require_concept<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ decay<Property>::type::is_requirable_concept
+ >::type,
+ typename enable_if<
+ static_require_concept<T, Property>::is_valid
>::type>
{
ASIO_STATIC_CONSTEXPR(overload_type, overload = identity);
@@ -156,18 +157,19 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- decay<Property>::type::is_requirable_concept
- &&
- !static_require_concept<T, Property>::is_valid
- &&
- require_concept_member<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ decay<Property>::type::is_requirable_concept
+ >::type,
+ typename enable_if<
+ !static_require_concept<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ require_concept_member<T, Property>::is_valid
>::type> :
require_concept_member<T, Property>
{
@@ -177,20 +179,22 @@
template <typename T, typename Property>
struct call_traits<T, void(Property),
typename enable_if<
- (
- is_applicable_property<
- typename decay<T>::type,
- typename decay<Property>::type
- >::value
- &&
- decay<Property>::type::is_requirable_concept
- &&
- !static_require_concept<T, Property>::is_valid
- &&
- !require_concept_member<T, Property>::is_valid
- &&
- require_concept_free<T, Property>::is_valid
- )
+ is_applicable_property<
+ typename decay<T>::type,
+ typename decay<Property>::type
+ >::value
+ >::type,
+ typename enable_if<
+ decay<Property>::type::is_requirable_concept
+ >::type,
+ typename enable_if<
+ !static_require_concept<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ !require_concept_member<T, Property>::is_valid
+ >::type,
+ typename enable_if<
+ require_concept_free<T, Property>::is_valid
>::type> :
require_concept_free<T, Property>
{