namespace std::execution {
template<sender Sndr, queryable Env>
constexpr decltype(auto) transform_sender(Sndr&& sndr, const Env& env)
noexcept(see below);
}
概要
実行ドメインに応じてSenderを変換する。 SenderとReceiverとの接続(connect)時のカスタマイゼーションポイントとして機能する。
下記手順によってSender変換が行われる。
- Receiverの環境
evnに開始ドメインを、Sendersndrに完了ドメインをそれぞれ問い合わせる。 - 開始ドメインの上で、恒等変化となるまで(Sender型が変化しなくなるまで)再起的にSender変換を適用する。
- 完了ドメインの上で再起的にSender変換を適用する。同過程でSender型が変化したときは完了ドメインを再度問い合わせる。
戻り値
式sに対して、start-domainをD()とする。ここでDを適格であるならば式get_domain(env)のdecay型、そうでなければdefault_domainとする。
またcompletion-domain(s)をD()とする。ここでDを適格であるならば式get_completion_domain<>(get_env(s), env)のdecay型、そうでなければdefault_domainとする。
説明用の式transformed-sndr(dom, tag, s)を次の通りとする。
- 適格であるならば、式
dom.transform_sender(tag, s, env) - そうでなければ、
default_domain().transform_sender(tag, s, env)
説明用の式transform-recurse(dom, tag, s)を次の通りとする。
transformed-sndr(dom, tag, s)とsの型がCV修飾を無視して同一ならば、式transformed-sndr(dom, tag, s)- そうではなく
tagがstartのとき、s2をtransformed-sndr(dom, tag, s)、dom2をstart-domainとして式transform-recurse(dom2, tag, s2) - そうでなければ、式
completion-domain(s2)
説明用の式tmp-sndrをtransform-recurse(completion-domain(sndr), set_value, sndr)、式final-sndrをtransform-recurse(start-domain, start, tmp-sndr)とする。
final-sndrを返す。
例外
例外指定はnoexcept(final-sndr)に等しい。
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??