1
0
Fork 0
mirror of https://gitlab.com/niansa/libcrosscoro.git synced 2025-03-06 20:53:32 +01:00
libcrosscoro/inc/coro/promise.hpp
Josh Baldwin 76b41a6ca0
Scheduler now correctly co_await's the user tasks from cleanup task (#14)
Previously it set the continuation manually, which sort of works but
is not canonical.
2020-10-28 17:35:23 -06:00

38 lines
681 B
C++

#pragma once
#include "coro/awaitable.hpp"
#include <concepts>
namespace coro
{
template<typename type, typename return_type>
concept promise_type = requires(type t)
{
{
t.get_return_object()
}
->std::convertible_to<std::coroutine_handle<>>;
{
t.initial_suspend()
}
->awaiter;
{
t.final_suspend()
}
->awaiter;
{
t.yield_value()
}
->awaitable;
}
&&requires(type t, return_type return_value)
{
std::same_as<decltype(t.return_void()), void> || std::same_as<decltype(t.return_value(return_value)), void> ||
requires
{
t.yield_value(return_value);
};
};
} // namespace coro