in include/unifex/then.hpp [63:94]
void set_value(Values&&... values) && noexcept {
using result_type = std::invoke_result_t<Func, Values...>;
if constexpr (std::is_void_v<result_type>) {
if constexpr (noexcept(std::invoke(
(Func &&) func_, (Values &&) values...))) {
std::invoke((Func &&) func_, (Values &&) values...);
unifex::set_value((Receiver &&) receiver_);
} else {
UNIFEX_TRY {
std::invoke((Func &&) func_, (Values &&) values...);
unifex::set_value((Receiver &&) receiver_);
} UNIFEX_CATCH (...) {
unifex::set_error((Receiver &&) receiver_, std::current_exception());
}
}
} else {
if constexpr (noexcept(std::invoke(
(Func &&) func_, (Values &&) values...))) {
unifex::set_value(
(Receiver &&) receiver_,
std::invoke((Func &&) func_, (Values &&) values...));
} else {
UNIFEX_TRY {
unifex::set_value(
(Receiver &&) receiver_,
std::invoke((Func &&) func_, (Values &&) values...));
} UNIFEX_CATCH (...) {
unifex::set_error((Receiver &&) receiver_, std::current_exception());
}
}
}
}