in include/unifex/sequence.hpp [146:176]
void set_value() && noexcept {
// Take a copy of op_ before destroying predOp_ as this may end up
// destroying *this.
using successor_receiver_t =
successor_receiver<Predecessor, Successor, Receiver>;
auto* op = op_;
op->status_ = operation_type::status::empty;
unifex::deactivate_union_member(op->predOp_);
if constexpr (is_nothrow_connectable_v<Successor, successor_receiver_t>) {
unifex::activate_union_member_with(op->succOp_, [&]() noexcept {
return unifex::connect(
static_cast<Successor&&>(op->successor_), successor_receiver_t{op});
});
op->status_ = operation_type::status::successor_operation_constructed;
unifex::start(op->succOp_.get());
} else {
UNIFEX_TRY {
unifex::activate_union_member_with(op->succOp_, [&] {
return unifex::connect(
static_cast<Successor&&>(op->successor_), successor_receiver_t{op});
});
op->status_ = operation_type::status::successor_operation_constructed;
unifex::start(op->succOp_.get());
} UNIFEX_CATCH (...) {
unifex::set_error(
static_cast<Receiver&&>(op->receiver_),
std::current_exception());
}
}
}