#pragma once #include "coro/concepts/awaitable.hpp" #include namespace coro::concepts { // clang-format off template concept promise = requires(type t) { { t.get_return_object() } -> std::convertible_to>; { t.initial_suspend() } -> awaiter; { t.final_suspend() } -> awaiter; { t.yield_value() } -> awaitable; } && requires(type t, return_type return_value) { std::same_as || std::same_as || requires { t.yield_value(return_value); }; }; // clang-format on } // namespace coro::concepts