最終更新日時: 2026年01月20日 16時36分33秒 (JST)
yoh が更新

履歴 編集

concept
<execution>

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

    namespace std::execution {
      template<class Token>
      concept scope_token =
        copyable<Token> &&
        requires(const Token token) {
          { token.try_associate() } -> scope_association;
          { token.wrap(declval<test-sender>()) } -> sender_in<test-env>;
        };
    }

## 概要

`scope_token`コンセプトは、Senderと非同期スコープ間の関連付けを作成するために利用できる型`Token`に対する要件を定義する。 `Token`型の各オブジェクトは、関連スコープと呼ばれる非同期スコープに関連付けられる。

`test-sender`と`test-env`は、`sender_in<test-sender, test-env>`のモデルである未規定の型とする。

## モデル

型`Token`は、次のとき`scope_token`のモデルとなる。

- `Token`型オブジェクトのコピー構築、ムーブ構築、コピー代入、ムーブ代入から例外送出しない、かつ
- `Token`型のオブジェクト`token`に対して、`token.try_associate()`は有効でない(not engaged)オブジェクト、もしくは`token`の関連スコープとの新しい関連付けを取得して関連付けを所有する有効な(engaged)オブジェクトのいずれかを返す。
- （const修飾の可能性のある）型`Token`の左辺値`token`が与えられたとき、型`decltype((sndr))`が`sender`のモデルである全ての式`sndr`に対して、
  - `token.warp(sndr)`が有効な式、かつ
  - `decltype(token.warp(sndr))`は`sender`のモデルであり、かつ
  - `sender_in<decltype((sndr)), E>`のモデルである全ての`E`型に対して、`completion_signatures_of_t<decltype(token.wrap(sndr)), E>`は`completion_signatures_of_t<decltype((sndr)), E>`と同一の完了シグネチャを含むこと。

## 例

    #include <execution>
    namespace ex = std::execution;

    int main()
    {
      ex::counting_scope scope;
      ex::scope_token auto token = scope.get_token();
    }

### 出力

## バージョン

### 言語

- C++26

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??

## 関連項目

- `execution::associate`
- `execution::spawn_future`
- `execution::spawn`
- `execution::scope_association`

## 参照

- P3149R11 `async_scope` - Creating scopes for non-sequential concurrency
- P3815R1 Add `scope_association` concept to P3149