12 template<
typename Awaitable>
13 auto get_awaiter(Awaitable&& awaitable,
void*) ->
decltype(
auto) {
14 if constexpr (
requires { util::forward<Awaitable>(awaitable).operator
co_await(); }) {
15 return util::forward<Awaitable>(awaitable).operator
co_await();
16 }
else if constexpr (
requires {
operator co_await(util::forward<Awaitable>(awaitable)); }) {
17 return operator co_await(util::forward<Awaitable>(awaitable));
19 return util::forward<Awaitable>(awaitable);
25 template<
typename Awaitable,
typename Promise>
26 auto get_awaiter(Awaitable&& awaitable, Promise* promise) ->
decltype(
auto)
27 requires(
requires { promise->await_transform(util::forward<Awaitable>(awaitable)); })
29 return get_awaiter(promise->await_transform(util::forward<Awaitable>(awaitable)),
util::voidify(promise));
35template<
typename T,
typename Promise =
void>
36concept IsAwaitable =
requires(T (&f)()
noexcept, Promise* promise) {
Definition is_awaitable.h:36
Definition is_awaiter.h:22
Definition any_storable.h:9
constexpr auto voidify
Definition voidify.h:13