20 template<
typename Promise>
24 auto& promise = handle.promise ();
25 if constexpr (Promise::IsVoid)
26 promise.return_void ();
28 promise.return_value (
Left { error });
33 template<
typename L,
typename R,
typename ErrorHandler>
48 if constexpr (std::is_same_v<void, HandlerReturn_t>)
53 else if constexpr (std::is_same_v<IgnoreLeft, HandlerReturn_t>)
55 static_assert (std::is_default_constructible_v<R>);
70 template<
typename L,
typename R,
typename F>
71 requires std::invocable<F, const L&>
74 return { either, std::forward<F> (errorHandler) };
80 template<
typename L,
typename R>
83 return { either, {} };
void TerminateLeftyCoroutine(std::coroutine_handle< Promise > handle, const auto &error)
detail::EitherAwaiter< L, R, F > WithHandler(const Either< L, R > &either, F &&errorHandler)
void await_suspend(auto handle)
R await_resume() const noexcept
decltype(Handler_(Either_.GetLeft())) HandlerReturn_t
bool await_ready() const noexcept