11 #ifndef ASIO_EXECUTION_RECEIVER_HPP 12 #define ASIO_EXECUTION_RECEIVER_HPP 14 #if defined(_MSC_VER) && (_MSC_VER >= 1200) 16 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) 18 #include "asio/detail/config.hpp" 19 #include "asio/detail/type_traits.hpp" 20 #include "asio/detail/variadic_templates.hpp" 21 #include "asio/execution/set_done.hpp" 22 #include "asio/execution/set_error.hpp" 23 #include "asio/execution/set_value.hpp" 25 #if defined(ASIO_HAS_STD_EXCEPTION_PTR) 27 #else // defined(ASIO_HAS_STD_EXCEPTION_PTR) 28 # include "asio/error_code.hpp" 29 #endif // defined(ASIO_HAS_STD_EXCEPTION_PTR) 31 #if defined(ASIO_HAS_DEDUCED_SET_DONE_FREE_TRAIT) \ 32 && defined(ASIO_HAS_DEDUCED_SET_DONE_MEMBER_TRAIT) \ 33 && defined(ASIO_HAS_DEDUCED_SET_ERROR_FREE_TRAIT) \ 34 && defined(ASIO_HAS_DEDUCED_SET_ERROR_MEMBER_TRAIT) \ 35 && defined(ASIO_HAS_DEDUCED_SET_VALUE_FREE_TRAIT) \ 36 && defined(ASIO_HAS_DEDUCED_SET_VALUE_MEMBER_TRAIT) \ 37 && defined(ASIO_HAS_DEDUCED_RECEIVER_OF_FREE_TRAIT) \ 38 && defined(ASIO_HAS_DEDUCED_RECEIVER_OF_MEMBER_TRAIT) 39 # define ASIO_HAS_DEDUCED_EXECUTION_IS_RECEIVER_TRAIT 1 40 #endif // defined(ASIO_HAS_DEDUCED_SET_DONE_FREE_TRAIT) 49 #include "asio/detail/push_options.hpp" 55 template <
typename T,
typename E>
57 integral_constant<bool,
58 is_move_constructible<typename remove_cvref<T>::type>::value
59 && is_constructible<typename remove_cvref<T>::type, T>::value
66 #if defined(ASIO_HAS_STD_EXCEPTION_PTR) 67 # define ASIO_EXECUTION_RECEIVER_ERROR_DEFAULT = std::exception_ptr 68 #else // defined(ASIO_HAS_STD_EXCEPTION_PTR) 69 # define ASIO_EXECUTION_RECEIVER_ERROR_DEFAULT \ 71 #endif // defined(ASIO_HAS_STD_EXCEPTION_PTR) 80 template <
typename T,
typename E ASIO_EXECUTION_RECEIVER_ERROR_DEFAULT>
82 #if defined(GENERATING_DOCUMENTATION) 83 integral_constant<bool, automatically_determined>
84 #else // defined(GENERATING_DOCUMENTATION) 86 can_set_done<typename remove_cvref<T>::type>::value
87 && is_nothrow_set_done<typename remove_cvref<T>::type>::value
88 && can_set_error<typename remove_cvref<T>::type, E>::value
89 && is_nothrow_set_error<typename remove_cvref<T>::type, E>::value,
90 detail::is_receiver_base<T, E>,
93 #endif // defined(GENERATING_DOCUMENTATION) 97 #if defined(ASIO_HAS_VARIABLE_TEMPLATES) 99 template <
typename T,
typename E ASIO_EXECUTION_RECEIVER_ERROR_DEFAULT>
102 #endif // defined(ASIO_HAS_VARIABLE_TEMPLATES) 104 #if defined(ASIO_HAS_CONCEPTS) 106 template <
typename T,
typename E ASIO_EXECUTION_RECEIVER_ERROR_DEFAULT>
109 #define ASIO_EXECUTION_RECEIVER ::asio::execution::receiver 111 #else // defined(ASIO_HAS_CONCEPTS) 113 #define ASIO_EXECUTION_RECEIVER typename 115 #endif // defined(ASIO_HAS_CONCEPTS) 117 #if defined(ASIO_HAS_VARIADIC_TEMPLATES) \ 118 || defined(GENERATING_DOCUMENTATION) 127 template <
typename T,
typename... Vs>
129 #if defined(GENERATING_DOCUMENTATION) 130 integral_constant<bool, automatically_determined>
131 #else // defined(GENERATING_DOCUMENTATION) 133 is_receiver<T>::value,
134 can_set_value<typename remove_cvref<T>::type, Vs...>,
137 #endif // defined(GENERATING_DOCUMENTATION) 141 #if defined(ASIO_HAS_VARIABLE_TEMPLATES) 143 template <
typename T,
typename... Vs>
144 ASIO_CONSTEXPR
const bool is_receiver_of_v =
147 #endif // defined(ASIO_HAS_VARIABLE_TEMPLATES) 149 #if defined(ASIO_HAS_CONCEPTS) 151 template <
typename T,
typename... Vs>
154 #define ASIO_EXECUTION_RECEIVER_OF_0 \ 155 ::asio::execution::receiver_of 157 #define ASIO_EXECUTION_RECEIVER_OF_1(v) \ 158 ::asio::execution::receiver_of<v> 160 #else // defined(ASIO_HAS_CONCEPTS) 162 #define ASIO_EXECUTION_RECEIVER_OF_0 typename 163 #define ASIO_EXECUTION_RECEIVER_OF_1(v) typename 165 #endif // defined(ASIO_HAS_CONCEPTS) 167 #else // defined(ASIO_HAS_VARIADIC_TEMPLATES) 170 template <
typename T,
typename = void,
171 typename = void,
typename = void,
typename = void,
typename = void,
172 typename = void,
typename = void,
typename = void,
typename =
void>
175 template <
typename T>
178 is_receiver<T>::value,
179 can_set_value<typename remove_cvref<T>::type>,
185 #define ASIO_PRIVATE_RECEIVER_OF_TRAITS_DEF(n) \ 186 template <typename T, ASIO_VARIADIC_TPARAMS(n)> \ 187 struct is_receiver_of<T, ASIO_VARIADIC_TARGS(n)> : \ 189 conditional<true, is_receiver<T>, void>::type::value, \ 191 typename remove_cvref<T>::type, \ 192 ASIO_VARIADIC_TARGS(n)>, \ 198 ASIO_VARIADIC_GENERATE(ASIO_PRIVATE_RECEIVER_OF_TRAITS_DEF)
199 #undef ASIO_PRIVATE_RECEIVER_OF_TRAITS_DEF 201 #define ASIO_EXECUTION_RECEIVER_OF_0 typename 202 #define ASIO_EXECUTION_RECEIVER_OF_1(v) typename 204 #endif // defined(ASIO_HAS_VARIADIC_TEMPLATES) 207 #if defined(ASIO_HAS_VARIADIC_TEMPLATES) \ 208 || defined(GENERATING_DOCUMENTATION) 220 template <
typename T,
typename... Vs>
222 #if defined(GENERATING_DOCUMENTATION) 223 integral_constant<bool, automatically_determined>
224 #else // defined(GENERATING_DOCUMENTATION) 225 integral_constant<bool,
226 is_receiver_of<T, Vs...>::value
227 && is_nothrow_set_value<typename remove_cvref<T>::type, Vs...>::value
229 #endif // defined(GENERATING_DOCUMENTATION) 233 #if defined(ASIO_HAS_VARIABLE_TEMPLATES) 235 template <
typename T,
typename... Vs>
236 ASIO_CONSTEXPR
const bool is_nothrow_receiver_of_v =
239 #endif // defined(ASIO_HAS_VARIABLE_TEMPLATES) 241 #else // defined(ASIO_HAS_VARIADIC_TEMPLATES) 244 template <
typename T,
typename = void,
245 typename = void,
typename = void,
typename = void,
typename = void,
246 typename = void,
typename = void,
typename = void,
typename =
void>
249 template <
typename T>
251 integral_constant<bool,
252 is_receiver_of<T>::value
253 && is_nothrow_set_value<typename remove_cvref<T>::type>::value
258 #define ASIO_PRIVATE_NOTHROW_RECEIVER_OF_TRAITS_DEF(n) \ 259 template <typename T, ASIO_VARIADIC_TPARAMS(n)> \ 260 struct is_nothrow_receiver_of<T, ASIO_VARIADIC_TARGS(n)> : \ 261 integral_constant<bool, \ 262 is_receiver_of<T, ASIO_VARIADIC_TARGS(n)>::value \ 263 && is_nothrow_set_value<typename remove_cvref<T>::type, \ 264 ASIO_VARIADIC_TARGS(n)>::value \ 269 ASIO_VARIADIC_GENERATE(ASIO_PRIVATE_NOTHROW_RECEIVER_OF_TRAITS_DEF)
270 #undef ASIO_PRIVATE_NOTHROW_RECEIVER_OF_TRAITS_DEF 272 #endif // defined(ASIO_HAS_VARIADIC_TEMPLATES) 278 #include "asio/detail/pop_options.hpp" 280 #endif // ASIO_EXECUTION_RECEIVER_HPP The is_receiver trait detects whether a type T satisfies the execution::receiver concept.
Definition: receiver.hpp:81
Definition: receiver.hpp:173
Definition: receiver.hpp:56
Definition: receiver.hpp:247
Definition: handler_work.hpp:37
Definition: receiver.cpp:18
Definition: any_io_executor.hpp:28