最終更新日時: 2026年06月08日 10時13分52秒 (JST)
yoh が更新

履歴 編集

concept
<execution>

# std::execution::operation_state(C++26)

    namespace std::execution {
      template<class O>
      concept operation_state =
        derived_from<typename O::operation_state_concept, operation_state_tag> &&
        requires (O& o) {
          start(o);
        };

      struct operation_state_tag {};  // タグ型
    }

## 概要

`operation_state`は、型`O`がOperation State型の要件を満たすことを表すコンセプトである。

下記をみたすクラス型はOperation Stateとみなせる。

- `operation_state_tag`をメンバ型`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_tag;

      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++: ??

## 関連項目

- `execution::connect`

## 参照

- P2300R10 `std::execution`
- LWG 4200. The `operation_state` concept can be simplified
- P4154R0 Renaming various execution things