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