最終更新日時(UTC):
が更新

履歴 編集

function template
<execution>

std::execution::transform_sender(C++26)

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-domainD()とする。ここで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)を次の通りとする。

説明用の式transform-recurse(dom, tag, s)を次の通りとする。

  • transformed-sndr(dom, tag, s)sの型がCV修飾を無視して同一ならば、式transformed-sndr(dom, tag, s)
  • そうではなくtagstartのとき、s2transformed-sndr(dom, tag, s)dom2start-domainとして式transform-recurse(dom2, tag, s2)
  • そうでなければ、式completion-domain(s2)

説明用の式tmp-sndrtransform-recurse(completion-domain(sndr), set_value, sndr)、式final-sndrtransform-recurse(start-domain, start, tmp-sndr)とする。

final-sndrを返す。

例外

例外指定はnoexcept(final-sndr)に等しい。

バージョン

言語

  • C++26

処理系

関連項目

参照