in include/unifex/retry_when.hpp [71:97]
void set_value() && noexcept {
UNIFEX_ASSERT(op_ != nullptr);
// This signals to retry the operation.
auto* const op = op_;
destroy_trigger_op();
using source_receiver_t = source_receiver<Source, Func, Receiver>;
if constexpr (is_nothrow_connectable_v<Source&, source_receiver_t>) {
auto& sourceOp = unifex::activate_union_member_with(op->sourceOp_, [&]() noexcept {
return unifex::connect(op->source_, source_receiver_t{op});
});
op->isSourceOpConstructed_ = true;
unifex::start(sourceOp);
} else {
UNIFEX_TRY {
auto& sourceOp = unifex::activate_union_member_with(op->sourceOp_, [&] {
return unifex::connect(op->source_, source_receiver_t{op});
});
op->isSourceOpConstructed_ = true;
unifex::start(sourceOp);
} UNIFEX_CATCH (...) {
unifex::set_error((Receiver&&)op->receiver_, std::current_exception());
}
}
}