#pragma once #include "coro/awaitable.hpp" #include namespace coro { template concept promise_type = requires(T t) { { t.get_return_object() } -> std::convertible_to>; { t.initial_suspend() } -> awaiter_type; { t.final_suspend() } -> awaiter_type; { t.yield_value() } -> awaitable_type; } && requires(T t, return_type return_value) { std::same_as || std::same_as || requires { t.yield_value(return_value); }; }; } // namespace coro