最終更新日時: 2026年07月22日 16時08分23秒 (JST)
rotarymars が更新

履歴 編集

type-alias
<execution>

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

    namespace std::execution {
      template<class Sndr, class Env = env<>,
               template<class...> class Tuple = decayed-tuple,
               template<class...> class Variant = variant-or-empty>
        requires sender_in<Sndr, Env>
      using value_types_of_t =
        gather-signatures<set_value_t, completion_signatures_of_t<Sndr, Env>, Tuple, Variant>;
    }

## 概要

Sender型 `Sndr`が環境 `Env`において非同期操作を作成できるとき、完了シグネチャ集合のうち値完了シグネチャの引数型リスト集合に対して型情報の変換操作を適用し、新たな型を取得する。

値完了シグネチャの引数型リスト集合を`{Ts0..., Ts1..., ... TsN...}`としたとき、2段階の型変換操作をテンプレートパラメータ`Tuple`, `Variant`で指定する。

- `Tuple` : それぞれの引数型リスト`Ts...`に適用する型変換操作。
- `Variant` : 上記変換後に、引数型リスト集合に適用する型変換操作。

`value_types_of_t`のデフォルト動作では、引数型リスト`tuple`の`variant`に変換される。

## 例

    #include <concepts>
    #include <execution>
    #include <tuple>
    #include <variant>
    namespace ex = std::execution;

    int main()
    {
      // 値完了シグネチャ set_value_t(int, char)
      ex::sender auto snd1 = ex::just(123, 'X');
      using Types1 = ex::value_types_of_t<decltype(snd1)>;
      static_assert(std::same_as<Types1, std::variant<std::tuple<int, char>>>);

      // 値完了シグネチャを持たないSender
      ex::sender auto snd2 = ex::just_error(42);
      using Types2 = ex::value_types_of_t<decltype(snd2)>;
      // Type2 == 有効だがオブジェクト構築不可な型
    }

### 出力

## バージョン

### 言語

- C++26

### 処理系

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

## 関連項目

- `execution::completion_signatures`
- `execution::set_value`

## 参照

- P2300R10 `std::execution`