namespace std::execution {
template<class O>
concept operation_state =
derived_from<typename O::operation_state_concept, operation_state_t> &&
is_object_v<O> &&
requires (O& o) {
{ start(o) } noexcept;
};
struct operation_state_t {}; // タグ型
}
概要
operation_state
は、型O
がOperation State型の要件を満たすことを表すコンセプトである。
下記をみたすクラス型はOperation Stateとみなせる。
operation_state_t
をメンバ型O::operation_state_concept
として定義するクラス型O
型の左辺値o
に対してexecution::start(o)
が有効な式かつ例外送出されないこと
非同期操作の生存期間中にoperation_state
オブジェクトが破棄されると、未定義の動作を引き起こす。
例
#include <print>
#include <execution>
namespace ex = std::execution;
struct ValueReceiver {
using receiver_concept = ex::receiver_t;
void set_value(int v) && noexcept
{
std::println("{}", v);
}
};
int main()
{
// 値42を送信するSender
ex::sender auto sndr = ex::just(42);
// int値を受信して表示するReceiver
ValueReceiver rcvr;
// SenderとReceiverを接続
ex::operation_state auto op = ex::connect(sndr, rcvr);
// Operation Stateを開始
ex::start(op);
}
出力
42
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??