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