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

履歴 編集

function template
<execution>

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

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) == 0trueならば、説明用の型NewSndrSndrとする。そうでなければ、下記の通り定義される式sを用いてdecltype(s)とする。

transform_sender(
  get-domain-late(declval<Sndr>(), declval<Env>()...),
  declval<Sndr>(),
  declval<Env>()...)

下記の通り定義される式eを用いて、return e;と等価。

説明用の式rcvrreceiverのモデルである型Rcvrの右辺値、型Sndrsender_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

処理系

関連項目

参照