11 #ifndef ASIO_EXECUTION_EXECUTOR_HPP 12 #define ASIO_EXECUTION_EXECUTOR_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/execution/execute.hpp" 21 #include "asio/execution/invocable_archetype.hpp" 22 #include "asio/traits/equality_comparable.hpp" 24 #if defined(ASIO_HAS_DEDUCED_EXECUTE_FREE_TRAIT) \ 25 && defined(ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT) \ 26 && defined(ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT) 27 # define ASIO_HAS_DEDUCED_EXECUTION_IS_EXECUTOR_TRAIT 1 28 #endif // defined(ASIO_HAS_DEDUCED_EXECUTE_FREE_TRAIT) 32 #include "asio/detail/push_options.hpp" 38 template <
typename T,
typename F>
40 integral_constant<bool,
41 conditional<true, true_type,
42 typename result_of<typename decay<F>::type&()>::type
44 && is_constructible<typename decay<F>::type, F>::value
45 && is_move_constructible<typename decay<F>::type>::value
46 #if defined(ASIO_HAS_NOEXCEPT)
47 && is_nothrow_copy_constructible<T>::value
48 && is_nothrow_destructible<T>::value
50 && is_copy_constructible<T>::value
51 && is_destructible<T>::value
53 && traits::equality_comparable<T>::is_valid
54 && traits::equality_comparable<T>::is_noexcept
59 template <
typename T,
typename F>
62 can_execute<typename add_const<T>::type, F>::value,
63 is_executor_of_impl_base<T, F>,
69 template <
typename T,
typename =
void>
72 typedef std::size_t type;
78 typename T::shape_type
81 typedef typename T::shape_type type;
84 template <
typename T,
typename Default,
typename =
void>
90 template <
typename T,
typename Default>
93 typename T::index_type
96 typedef typename T::index_type type;
108 template <
typename T>
110 #if defined(GENERATING_DOCUMENTATION) 111 integral_constant<bool, automatically_determined>
112 #else // defined(GENERATING_DOCUMENTATION) 114 #endif // defined(GENERATING_DOCUMENTATION) 118 #if defined(ASIO_HAS_VARIABLE_TEMPLATES) 120 template <
typename T>
123 #endif // defined(ASIO_HAS_VARIABLE_TEMPLATES) 125 #if defined(ASIO_HAS_CONCEPTS) 127 template <
typename T>
130 #define ASIO_EXECUTION_EXECUTOR ::asio::execution::executor 132 #else // defined(ASIO_HAS_CONCEPTS) 134 #define ASIO_EXECUTION_EXECUTOR typename 136 #endif // defined(ASIO_HAS_CONCEPTS) 146 template <
typename T,
typename F>
148 #if defined(GENERATING_DOCUMENTATION) 149 integral_constant<bool, automatically_determined>
150 #else // defined(GENERATING_DOCUMENTATION) 151 integral_constant<bool,
152 is_executor<T>::value && detail::is_executor_of_impl<T, F>::value
154 #endif // defined(GENERATING_DOCUMENTATION) 158 #if defined(ASIO_HAS_VARIABLE_TEMPLATES) 160 template <
typename T,
typename F>
161 ASIO_CONSTEXPR
const bool is_executor_of_v =
164 #endif // defined(ASIO_HAS_VARIABLE_TEMPLATES) 166 #if defined(ASIO_HAS_CONCEPTS) 168 template <
typename T,
typename F>
171 #define ASIO_EXECUTION_EXECUTOR_OF(f) \ 172 ::asio::execution::executor_of<f> 174 #else // defined(ASIO_HAS_CONCEPTS) 176 #define ASIO_EXECUTION_EXECUTOR_OF typename 178 #endif // defined(ASIO_HAS_CONCEPTS) 187 template <
typename T>
189 #if !defined(GENERATING_DOCUMENTATION)
191 #endif // !defined(GENERATING_DOCUMENTATION) 193 #if defined(GENERATING_DOCUMENTATION) 194 typedef automatically_determined type;
196 #endif // defined(GENERATING_DOCUMENTATION) 199 #if defined(ASIO_HAS_ALIAS_TEMPLATES) 201 template <
typename T>
204 #endif // defined(ASIO_HAS_ALIAS_TEMPLATES) 213 template <
typename T>
215 #if !defined(GENERATING_DOCUMENTATION)
217 #endif // !defined(GENERATING_DOCUMENTATION) 219 #if defined(GENERATING_DOCUMENTATION) 220 typedef automatically_determined type;
223 #endif // defined(GENERATING_DOCUMENTATION) 226 #if defined(ASIO_HAS_ALIAS_TEMPLATES) 228 template <
typename T>
229 using executor_index_t =
typename executor_index<T>::type;
231 #endif // defined(ASIO_HAS_ALIAS_TEMPLATES) 236 #include "asio/detail/pop_options.hpp" 238 #endif // ASIO_EXECUTION_EXECUTOR_HPP Definition: executor.hpp:60
Definition: type_traits.hpp:135
The executor_index trait detects the type used by an executor to represent an index within a bulk ope...
Definition: executor.hpp:214
Polymorphic wrapper for executors.
Definition: executor.hpp:47
The is_executor_of trait detects whether a type T satisfies the execution::executor_of concept for so...
Definition: executor.hpp:147
Definition: executor.hpp:70
Definition: handler_work.hpp:37
Definition: executor.hpp:85
Definition: executor.hpp:39
The executor_shape trait detects the type used by an executor to represent the shape of a bulk operat...
Definition: executor.hpp:188
Definition: any_io_executor.hpp:28
The is_executor trait detects whether a type T satisfies the execution::executor concept.
Definition: executor.hpp:109