namespace std::execution {
template<class-type D>
struct sender_adaptor_closure { };
}
概要
sender_adaptor_closure
は、ユーザ定義のパイプ可能Senderアダプタクロージャオブジェクトの実装を補助するクラステンプレートである。
sender_adaptor_closure<T>
を基底クラスとして持つクラス型T
のオブジェクトは、パイプ可能Senderアダプタクロージャオブジェクトとなる。
sender_adaptor_closure
のテンプレートパラメータD
は不完全型でもよい。
|
演算子のオペランドにcv修飾された型D
の式が登場するまでに、D
は完全型かつderived_from<sender_adaptor_closure<D>>
のモデルとなるべき。
パイプ可能Senderアダプタクロージャオブジェクト
パイプ可能Senderアダプタクロージャオブジェクト(pipeable sender adaptor closure object)とは、1つ以上のsender
を引数にとり、戻り値としてsender
を返す関数オブジェクトである。
パイプ可能Senderアダプタクロージャオブジェクトc
と型decltype((sndr))
がsender
のモデルである式sndr
に対して、下記の2つの式は等価であり、いずれもsender
を生成する。
c(sndr)
sndr | c
さらにパイプ可能Senderアダプタクロージャオブジェクトd
が与えられたとき、式 c | d
は別のパイプ可能Senderアダプタクロージャオブジェクトe
となる。
このとき、e
は下記の特性を持つ完全転送呼び出しラッパー(perfect forwarding call wrapper)である。
- 対象オブジェクトは、
d
で直接非リスト初期化された型decltype(auto(d))
のオブジェクトd2
である。 c
で直接非リスト初期化された型decltype(auto(c))
のオブジェクトc2
を、1個の束縛引数エンティティとして持つ。- 説明用の
arg
をe
に対する関数呼び出し式の引数としたとき、呼び出しパターンd2(c2(arg))
に対応する。
式 c | d
は、e
の全て状態エンティティ(state entities)の初期化が適格な場合に限って適格となる。
パイプ可能Senderアダプタオブジェクト
パイプ可能Senderアダプタオブジェクト(pipeable sender adaptor object)とは、第1引数にsender
をとり、戻り値としてsender
を返すカスタマイゼーションポイントオブジェクトである。
パイプ可能Senderアダプタオブジェクトが1個の引数しかとらないとき、パイプ可能Senderアダプタクロージャオブジェクトとなる。
パイプ可能Senderアダプタオブジェクトadaptor
が1個より多い引数をとるとき、型decltype((sndr))
がsender
のモデルである式sndr
、args...
を式adaptor(sndr, args...)
が適格となる引数リスト、型パックBoundsArgs
をdecltype(auto(args))...
とする。
式adaptor(args...)
は、下記の特性をもつ完全転送呼び出しラッパーであるパイプ可能Senderアダプタクロージャオブジェクトf
を生成する。
- 対象オブジェクトは
adaptor
のコピー。 - 束縛引数エンティティ
bound_args
は、それぞれstd::forward<decltype((args))>(args)...
で直接非リスト初期化された型BoundArgs...
のオブジェクトから構成される。 - 説明用の
rcvr
をf
に対する関数呼び出し式の引数としたとき、呼び出しパターンadaptor(rcvr, bound_args...)
に対応する。
式adaptor(args...)
は、前述の通り結果の束縛引数エンティティの初期化が適格な場合に限って適格となる。
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??