From ff695a037665c513fe8efbe93306bbdfd5f6f7af Mon Sep 17 00:00:00 2001 From: Christopher Kohlhoff Date: Thu, 2 Jul 2020 20:11:14 +1000 Subject: [PATCH] Simplify overloads in any_executor's query() backend. --- include/boost/asio/execution/any_executor.hpp | 61 +++++++++++-------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/include/boost/asio/execution/any_executor.hpp b/include/boost/asio/execution/any_executor.hpp index 144f2f6e..e0f01cf3 100644 --- a/include/boost/asio/execution/any_executor.hpp +++ b/include/boost/asio/execution/any_executor.hpp @@ -829,21 +829,16 @@ protected: # pragma warning (disable:4702) #endif // defined(BOOST_ASIO_MSVC) - template - static void query_fn_impl(void*, const void*, const void*, - typename enable_if< - is_same::value - >::type*) + static void query_fn_void(void*, const void*, const void*) { bad_executor ex; boost::asio::detail::throw_exception(ex); } template - static void query_fn_impl(void*, const void* ex, const void* prop, + static void query_fn_non_void(void*, const void* ex, const void* prop, typename enable_if< - !is_same::value - && boost::asio::can_query::value + boost::asio::can_query::value && is_same::value >::type*) { @@ -852,20 +847,18 @@ protected: } template - static void query_fn_impl(void*, const void*, const void*, + static void query_fn_non_void(void*, const void*, const void*, typename enable_if< - !is_same::value - && !boost::asio::can_query::value + !boost::asio::can_query::value && is_same::value >::type*) { } template - static void query_fn_impl(void* result, const void* ex, const void* prop, + static void query_fn_non_void(void* result, const void* ex, const void* prop, typename enable_if< - !is_same::value - && boost::asio::can_query::value + boost::asio::can_query::value && !is_same::value && is_reference::value >::type*) @@ -878,10 +871,9 @@ protected: } template - static void query_fn_impl(void*, const void*, const void*, + static void query_fn_non_void(void*, const void*, const void*, typename enable_if< - !is_same::value - && !boost::asio::can_query::value + !boost::asio::can_query::value && !is_same::value && is_reference::value >::type*) @@ -890,10 +882,9 @@ protected: } template - static void query_fn_impl(void* result, const void* ex, const void* prop, + static void query_fn_non_void(void* result, const void* ex, const void* prop, typename enable_if< - !is_same::value - && boost::asio::can_query::value + boost::asio::can_query::value && !is_same::value && is_scalar::value >::type*) @@ -905,10 +896,9 @@ protected: } template - static void query_fn_impl(void* result, const void*, const void*, + static void query_fn_non_void(void* result, const void*, const void*, typename enable_if< - !is_same::value - && !boost::asio::can_query::value + !boost::asio::can_query::value && !is_same::value && is_scalar::value >::type*) @@ -918,10 +908,9 @@ protected: } template - static void query_fn_impl(void* result, const void* ex, const void* prop, + static void query_fn_non_void(void* result, const void* ex, const void* prop, typename enable_if< - !is_same::value - && boost::asio::can_query::value + boost::asio::can_query::value && !is_same::value && !is_reference::value && !is_scalar::value @@ -934,12 +923,30 @@ protected: } template - static void query_fn_impl(void* result, const void*, const void*, ...) + static void query_fn_non_void(void* result, const void*, const void*, ...) { *static_cast(result) = new typename Prop::polymorphic_query_result_type(); } + template + static void query_fn_impl(void* result, const void* ex, const void* prop, + typename enable_if< + is_same::value + >::type*) + { + query_fn_void(result, ex, prop); + } + + template + static void query_fn_impl(void* result, const void* ex, const void* prop, + typename enable_if< + !is_same::value + >::type*) + { + query_fn_non_void(result, ex, prop, 0); + } + template static void query_fn(void* result, const void* ex, const void* prop) {