16 template<
typename L, std::default_initializable R>
36 template<
typename L,
typename R>
41 template<
typename ErrorHandler>
61 template<
typename L,
typename R,
typename ErrorHandler =
void>
72 template<
typename Promise>
77 auto& promise = handle.promise ();
78 if constexpr (Promise::IsVoid)
79 promise.return_void ();
81 promise.return_value (Promise::ReturnType_t::Left (
Either_.GetLeft ()));
93 template<
typename L,
typename R,
typename F>
97 return { either, { std::forward<F> (errorHandler) } };
103 template<
typename L,
typename R>
requires std::invocable< F, const L & > Util::detail::EitherAwaiter< L, R, F > WithHandler(const Util::Either< L, R > &either, F &&errorHandler)
void await_suspend(std::coroutine_handle< Promise > handle)
void HandleError(auto &&)
void await_suspend(auto) const noexcept
R await_resume() const noexcept
requires(Tup1Size==Tup2Size) const expr auto ZipWith(Tup1 &&tup1
EitherAwaiterErrorHandler< ErrorHandler > Handler_
bool await_ready() const noexcept
void HandleError(L &&left)
auto Tup2 &&tup2 noexcept
IgnoreLeft(Either< L, R >) -> IgnoreLeft< L, R >
bool await_ready() const noexcept
R await_resume() const noexcept
R RightOr(const Either< L, R > &either, F &&f)