namespace std::exectution {
template<
valid-completion-signatures InputSignatures,
valid-completion-signatures AdditionalSignatures = completion_signatures<>,
template<class...> class SetValue = default-set-value,
template<class> class SetError = default-set-error,
valid-completion-signatures SetStopped = completion_signatures<set_stopped_t()>>
using transform_completion_signatures = completion_signatures<see below>;
}
概要
完了シグネチャ集合から別の完了シグネチャ集合へ変換するエイリアステンプレート。
テンプレートパラメータとして完了シグネチャ集合と、各完了シグネチャに対して型変更を適用する複数のテンプレート引数をとり、completion_signatures
の新しい特殊化を生成する。
InputSignatures
: 変換元の入力完了シグネチャ集合AdditionalSignatures
: 追加される完了シグネチャ集合(下記3種の変換適用後に追加される)SetValue
: 値完了シグネチャ集合に適用する型変換メタ操作SetError
: エラー完了シグネチャ集合に適用する型変換メタ操作SetStopped
: 停止完了シグネチャを置換する完了シグネチャ集合
詳細仕様
説明専用のエイリアステンプレートdefault-set-value
, default-set-error
を次の通り定義する。
template<class... As>
using default-set-value =
completion_signatures<set_value_t(As...)>;
template<class Err>
using default-set-error =
completion_signatures<set_error_t(Err)>;
説明用のパック型As
に対して、エイリアステンプレートSetValue<As...>
を不適格、もしくはvalid-completion-signatures<SetValue<As...>>
を満たす型とする。
説明用の型Err
に対して、エイリアステンプレートSetError<Err>
を不適格、もしくはvalid-completion-signatures<SetError<Error>>
を満たす型とする。
説明用のパックVs
を、gather-signatures<set_value_t, InputSignatures, SetValue, type-list>
で得られるtype-list
の型パラメータパックとする。
説明用のパックEs
を、gather-signatures<set_error_t, InputSignatures, type_identity_t, error-list>
で得られるtype-list
の型パラメータパックとする。ここでエイリアステンプレートerror-list<Ts...>
はtype-list<SetError<Ts>...>
とする。
gather-signatures<set_stopped_t, InputSignatures, type-list, type-list>
がtype-list<>
となるならば、説明用のパックSs
をcompletion_signatures<>
とする。そうでなければ、Ss
をSetStopped
とする。
transform_completion_signatures<
InputSignatures, AdditionalSignatures,
SetValue, SetError, SetStopped>
そうでなければ、集合AdditionalSignatures
, Vs...
, Es...
, Ss
に含まれるcompletion_signatures
特殊化のテンプレート引数型の一意な集合をSig...
としたとき、transform_completion_signatures
はcompletion_signatures<Sigs...>
のエイリアスとなる。
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??