void set_done()

in include/unifex/upon_done.hpp [58:87]


  void set_done() && noexcept {
    using result_t = std::invoke_result_t<Func>;
    if constexpr (std::is_void_v<result_t>) {
      if constexpr (noexcept(std::invoke((Func &&) func_))) {
        std::invoke((Func &&) func_);
        unifex::set_value((Receiver &&) receiver_);
      } else {
        UNIFEX_TRY {
          std::invoke((Func &&) func_);
          unifex::set_value((Receiver &&) receiver_);
        }
        UNIFEX_CATCH(...) {
          unifex::set_error((Receiver &&) receiver_, std::current_exception());
        }
      }
    } else {
      if constexpr (noexcept(std::invoke((Func &&) func_))) {
        unifex::set_value(
            (Receiver &&) receiver_, std::invoke((Func &&) func_));
      } else {
        UNIFEX_TRY {
          unifex::set_value(
              (Receiver &&) receiver_, std::invoke((Func &&) func_));
        }
        UNIFEX_CATCH(...) {
          unifex::set_error((Receiver &&) receiver_, std::current_exception());
        }
      }
    }
  }