namespace std::execution {
struct get_completion_signatures_t;
inline constexpr get_completion_signatures_t get_completion_signatures{};
}
概要
get_completion_signatures
は、Senderの完了シグネチャ集合を取得するカスタマイゼーションポイントオブジェクトである。
効果
説明用のsndr
をdecltype((sndr))
がSndr
型となる式、env
をdecltype((env))
がEnv
型となる式とする。
式new_sndr
をtransform_sender(decltype(get-domain-late(sndr, env)){}, sndr, env)
とし、型NewSndr
をdecltype((new_sndr))
とする。
式get_completion_signatures(sndr, env)
は、void(sndr)
とvoid(env)
が不定順で序列化(indeterminately sequenced)されることを除いて(void(sndr), void(env), CS())
と等価である。
ここで、説明用の型CS
は下記の通り定義される。
- 型が適格であるならば、
decltype(new_sndr.get_completion_signatures(env))
- そうではなく、型が適格であるならば
remove_cvref_t<NewSndr>::completion_signatures
-
そうではなく、
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()>
-
そうでなければ、
CS
は不適格となる。
カスタマイゼーションポイント
- Sender
sndr
変換後のnew_sndr
に対して、new_sndr.get_completion_signatures(env)
が返す型。 - 変換後Senderの型
NewSndr
に対して、メンバ型NewSndr::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(sndr, ex::env<>{});
static_assert(std::same_as<decltype(sigs),
ex::completion_signatures<ex::set_value_t(int)>>);
}
出力
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??