void set_value()

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());
      }
    }
  }