in include/unifex/let_value.hpp [135:159]
void set_value(Values&&... values) && noexcept {
auto& op = op_;
UNIFEX_TRY {
scope_guard destroyPredOp =
[&]() noexcept { unifex::deactivate_union_member(op.predOp_); };
auto& valueTuple =
op.values_.template construct<decayed_tuple<Values...>>((Values &&) values...);
destroyPredOp.reset();
scope_guard destroyValues = [&]() noexcept {
op.values_.template destruct<decayed_tuple<Values...>>();
};
auto& succOp =
unifex::activate_union_member_with<successor_operation<Values...>>(
op.succOp_,
[&] {
return unifex::connect(
std::apply(std::move(op.func_), valueTuple),
successor_receiver<Operation, Values...>{op});
});
unifex::start(succOp);
destroyValues.release();
} UNIFEX_CATCH (...) {
unifex::set_error(std::move(op.receiver_), std::current_exception());
}
}