in include/unifex/upon_error.hpp [54:85]
void set_error(Error&& error) && noexcept{
using result_t = std::invoke_result_t<Func, Error>;
if constexpr (std::is_void_v<result_t>) {
if constexpr (noexcept(std::invoke((Func &&) func_, (Error &&) error))) {
std::invoke((Func &&) func_, (Error &&) error);
unifex::set_value((Receiver &&) receiver_);
} else {
UNIFEX_TRY {
std::invoke((Func &&) func_, (Error &&) error);
unifex::set_value((Receiver &&) receiver_);
}
UNIFEX_CATCH(...) {
unifex::set_error((Receiver &&) receiver_, std::current_exception());
}
}
} else {
if constexpr (noexcept(std::invoke((Func &&) func_, (Error &&) error))) {
unifex::set_value(
(Receiver &&) receiver_,
std::invoke((Func &&) func_, (Error &&) error));
} else {
UNIFEX_TRY {
unifex::set_value(
(Receiver &&) receiver_,
std::invoke((Func &&) func_, (Error &&) error));
}
UNIFEX_CATCH(...) {
unifex::set_error((Receiver &&) receiver_, std::current_exception());
}
}
}
}