最終更新日時(UTC):
が更新

履歴 編集

class template
<execution>

std::this_thread::sync-wait-receiver(C++26)

namespace std::this_thread {
  template<class Sndr>
  struct sync-wait-receiver {      // exposition only
    using receiver_concept = execution::receiver_t;
    sync-wait-state<Sndr>* state;  // exposition only

    template<class... Args>
    void set_value(Args&&... args) && noexcept;

    template<class Error>
    void set_error(Error&& err) && noexcept;

    void set_stopped() && noexcept;

    sync-wait-env get_env() const noexcept { return {&state->loop}; }
  };

  template<class Sndr>
  struct sync-wait-state {               // exposition only
    execution::run_loop loop;            // exposition only
    exception_ptr error;                 // exposition only
    sync-wait-result-type<Sndr> result;  // exposition only
  };
}

概要

sync-wait-receiverおよびsync-wait-stateは、Senderアルゴリズム動作仕様定義で用いられる説明専用のクラステンプレートである。

Senderコンシューマsync_wait動作においてSender接続(connect)するReceiver、同Receiverの内部状態として利用される。

メンバ関数 set_value

template<class... Args>
void set_value(Args&&... args) && noexcept;

効果 : 下記と等価

try {
  state->result.emplace(std::forward<Args>(args)...);
} catch (...) {
  state->error = current_exception();
}
state->loop.finish();

メンバ関数 set_error

template<class Error>
void set_error(Error&& err) && noexcept

効果 : 下記と等価

state->error = AS-EXCEPT-PTR(std::forward<Error>(err));
state->loop.finish();

メンバ関数 set_stopped

void set_stopped() && noexcept;

効果 : state->loop.finish()と等価。

バージョン

言語

  • C++26

関連項目

参照