8 using Handle = std::coroutine_handle<CoroPromise<T>>;
10 using ExpectedResult =
typename CoroPromise<T>::ExpectedResult;
20 std::swap(handle, other.handle);
28 std::exchange(handle,
nullptr).destroy();
31 constexpr bool await_ready()
const noexcept {
return false; }
33 template <std::derived_from<CoroPromiseBase> P>
34 void await_suspend(std::coroutine_handle<P> h) {
35 auto& promise = handle.promise();
37 promise.local = h.promise().local;
38 promise.exec->execute(handle);
41 constexpr ExpectedResult getResult()
noexcept {
42 ExpectedResult ret = std::move(handle.promise().result());
43 std::exchange(handle,
nullptr).destroy();