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