最終更新日時: 2026年06月06日 22時00分57秒 (JST)
yoh が更新

履歴 編集

customization point object
<execution>

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

    namespace std::execution {
      template<class CPO = void>
      struct get_completion_domain_t { unspecified };

      template<class CPO = void>
      inline constexpr get_completion_domain_t<CPO> get_completion_domain{};
    }

## 概要

`get_completion_domain<completion-tag>`は、Senderの属性から指定完了タグに関連付けられた完了ドメインを取得するクエリオブジェクトである。

コア定数式`forwarding_query(get_completion_domain<completion-tag>)`は`true`値を返す。

## 効果

式`attrs`とパック`envs`に対して、完了タグ`completion-tag`が`set_value_t`／`set_error_t`／ `set_stopped_t`のいずれでもなければ、呼び出し式`get_completion_domain<completion-tag>(attrs, envs...)`は不適格となる。 そうでなければ、型`D`を下記の通りとして、呼び出し式は`MANDATE-NOTHROW(D())`と等価である。

- 式が適格ならば`TRY-QUERY(attrs, get_completion_domain<completion-tag>, envs...)`の型。
- そうではなく、`completion-tag`が`void`のとき、式`get_completion_domain<set_value_t>(attrs, envs...)`の型。

- そうではなく、下記の式が適格ならばその型。

      TRY-QUERY(get_completion_scheduler<completion-tag>(attrs, envs...),
                get_completion_domain<set_value_t>, envs...)

- そうではなく、`scheduler<decltype((attrs))>`が`true`かつ`envs`が空のパックではないとき、`default_domain`

- そうでなければ、呼び出し式`get_completion_domain<completion-tag>(attrs, envs...)`は不適格となる。

## 例外

投げない

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

クエリ可能オブジェクト `q`を`attrs`としたとき、式`AS-CONST(q).query(get_completion_domain<completion-tag>, envs...)`が適格ならば呼び出される。 そうでなければ、`q`を`get_completion_scheduler`で取得される完了Schedulerとして、同様に式が適格ならば呼び出す。

型`Tag`、式`sndr`、パック`envs`に対して、`CS`を`completion_signatures_of_t<decay_t<decltype((sndr))>, decltype((envs))...>`とする。`get_completion_domain<Tag>(get_env(sndr), envs...)`と`CS`が両者とも適格、かつ`CS().count-of(Tag()) == 0`が`true`のとき、プログラムは不適格となる。

`completion-fn`を完了関数、`completion-tag`を完了関数に関連付けられた完了タグ、`args`と`envs`を部分式のパック、式`sndr`を`sender<decltype((sndr))>`が`true`かつ`get_completion_domain<completion-tag>(get_env(sndr), envs...)`となる式、`D`をドメインタグとする。`sndr`とReceiver `rcvr`を接続して作成された非同期操作が完了関数`completion-fn(rcvr, args...)`を評価するとき、その評価が実行ドメインタグ`D`に関連付けられた実行リソースの実行エージェント上で行われない場合、動作は未定義となる。

## バージョン

### 言語

- C++26

### 処理系

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

## 関連項目

- `execution::default_domain`
- `execution::get_domain`

## 参照

- P3826R5 Fix Sender Algorithm Customization