34template <
typename Ret,
typename Handle>
37template <
typename Ret,
typename T,
typename Handle>
40template <
typename Ret,
typename T,
typename Handle>
43template <
typename Ret,
typename T,
typename Handle>
46template <
typename Ret,
typename T,
typename Handle>
47Handle
func_arg(Ret (T::*)(Handle)
const);
49template <
typename Ret,
typename T,
typename Handle>
52template <
typename Ret,
typename T,
typename Handle>
57 || std::is_same_v<T, bool>
64 T &&t,
decltype(
detail::func_arg(&std::remove_reference_t<T>::await_suspend)) suspend_arg) {
65 { std::forward<T>(t).await_ready() } -> std::convertible_to<bool>;
66 { suspend_arg } -> std::convertible_to<std::coroutine_handle<>>;
69 std::forward<T>(t).await_resume();
72template <
typename T,
typename Value>
74 { std::forward<T>(t).await_resume() } -> std::same_as<Value>;
82template <
typename T,
typename Value>
88concept task_value_type = std::move_constructible<T> || std::is_reference_v<T> || std::is_void_v<T>;
92template <
typename Sync>
94 s.notify_awaitable_completed();
Type that supports the notify_awaitable_completed() member function used by mp_coro::detail::synchron...
decltype(auto) get_awaiter(T &&awaitable)
Apply member operator co_await if it exists, otherwise, apply global operator co_await if it exists,...
Handle func_arg(Ret(*)(Handle))