Iros
 
Loading...
Searching...
No Matches
is_awaiter.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/core.h"
5#include "di/meta/language.h"
7
8namespace di::concepts {
9namespace detail {
10 template<typename Promise, typename Awaiter>
11 auto do_await_suspend(Awaiter& awaiter) -> decltype(auto) {
12 if constexpr (!concepts::SameAs<Promise, void>) {
13 return awaiter.await_suspend(std::coroutine_handle<Promise> {});
14 }
15 }
16}
17
18// An awaiter object requires 3 methods: await_ready(), await_suspend(), and await_resume().
19// Because in reality, await_suspend() is only called with coroutine handles with concrete promise
20// types, it cannot be checked when the promise type is unknown.
21template<typename T, typename Promise = void>
22concept IsAwaiter = requires(T& awaiter) {
23 { awaiter.await_ready() } -> BooleanTestable;
25 awaiter.await_resume();
26};
27}
Definition await_suspend_result.h:9
Definition operations.h:128
Definition is_awaiter.h:22
Definition core.h:114
Definition impl.h:7
auto do_await_suspend(Awaiter &awaiter) -> decltype(auto)
Definition is_awaiter.h:11
Definition any_storable.h:9