namespace std::execution {
template<class Sndr, class... Env>
consteval auto get_completion_signatures() -> valid-completion-signatures auto;
}
概要
get_completion_signaturesは、Senderの完了シグネチャ集合を取得する関数テンプレートである。
非依存Sender
環境に依存することなく完了シグネチャ集合が決定するSenderは、非依存Sender(non-dependent sender)と呼ばれる。
型Sndrに対してsender<Sndr> == trueかつdependent_sender<Sndr> == falseの場合、Sndrは非依存Senderである。
テンプレートパラメータ制約
sizeof...(Env) <= 1
効果
説明用の式exceptを、move_constructible<Except> && derived_from<Except, exception>がtrueとなる未規定なクラスExceptの右辺値とする。eがコア定数式かつその型がvalid-completion-signaturesを満たすならば、式CHECKED-COMPLSIGS(e)をeとする。そうでなければ下記の式となる。
(e, throw except, completion_signatures())
説明用の式get-complsigs<Sndr, Env...>()を、remove_reference_t<Sndr>::template get_completion_signatures<Sndr, Env...>()と等価な式とする。
sizeof...(Env) == 0がtrueならば、説明用の型NewSndrをSndrとする。そうでなければ、下記の通り定義される式sを用いてdecltype(s)とする。
transform_sender(
get-domain-late(declval<Sndr>(), declval<Env>()...),
declval<Sndr>(),
declval<Env>()...)
下記の通り定義される式eを用いて、return e;と等価。
- 式
get-complsigs<NewSndr, Env...>()が適格であるならば、CHECKED-COMPLSIGS(get-complsigs<NewSndr, Env...>()) - そうではなく、式
get-complsigs<NewSndr>()が適格であるならば、CHECKED-COMPLSIGS(get-complsigs<NewSndr>()) -
そうではなく、
is-awaitable<NewSndr, env-promise<Env>...> == trueならばcompletion_signatures< SET-VALUE-SIG(await-result-type<NewSndr, env-promise<Env>...>), set_error_t(exception_ptr), set_stopped_t()> -
そうではなく、
sizeof...(Env) == 0ならば、(throw dependent-sender-error(), completion_signatures())- 型
dependent-sender-errorは、dependent_sender_errorもしくはdependent_sender_errorから曖昧さなく公開派生された未規定の型とする。
- 型
- そうでなければ、
(throw except, completion_signatures())
説明用の式rcvrをreceiverのモデルである型Rcvrの右辺値、型Sndrをsender_in<Sndr, env_of_t<Rcvr>> == trueとなる型とする。
Sigs...をcompletion_signatures_of_t<Sndr, env_of_t<Rcvr>>によるcompletion_signatures特殊化のテンプレートパラメータと定義する。
CSOを完了関数とする。
Sender型Sndr、もしくは式CSO(rcvr, args...)を呼び出すOperation Stateが潜在的に例外送出するならば、Sigs...の完了シグネチャSigは次の式がtrueとなるべき。
MATCHING-SIG(decayed-typeof<CSO>(decltype(args)...), Sig)
説明用の関数型F1, F2をそれぞれR1(Args1...), R2(Args2...)としたとき、説明専用の式MATCHING-SIG(F1, F2)は、same_as<R1(Args1&&...), R2(Args&&...)> == trueとなる場合にかぎってtrueとなる。
例
#include <print>
#include <execution>
namespace ex = std::execution;
int main()
{
// 値42を送信するSender
ex::sender auto sndr = ex::just(42);
// 値完了シグネチャ set_value_t(int)
auto sigs = ex::get_completion_signatures<decltype(sndr)>();
static_assert(std::same_as<decltype(sigs),
ex::completion_signatures<ex::set_value_t(int)>>);
}
出力
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??