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

履歴 編集

customization point object
<execution>

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

    namespace std::execution {
      struct start_t;
      inline constexpr start_t start{};
    }

## 概要

`start`は、Operation State関連付けられた非同期操作(asynchronous operation)を開始するカスタマイゼーションポイントオブジェクトである。

## 効果

式`start(op)`は、`op`が右辺値の場合は不適格となる。 そうでなければ、`MANDATE-NOTHROW(op.start())`と等価な式。

上記の式が適格なとき、その型は`void`であること。

## カスタマイゼーションポイント

Operation State `op`に対して式`op.start()`が呼び出される。 このとき`noexcept(op.start()) == true`であること。

`op.start()`がOperation Stateに関連付けられた非同期操作を開始しない場合、式`start(op)`の動作は未定義となる。

## 備考

`start`はSender内部実装から呼び出される想定であり、実行制御ライブラリ利用者が直接利用する必要はない。

## 例

    #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::operation_state`

## 参照

- P2300R10 `std::execution`
- LWG4143. `execution::set_value/set_error/set_stopped/start` should always return `void`