C++ 名前付き要件: RangeAdaptorClosureObject (C++20 以降)
From cppreference.com
Range adaptor closure object は、パイプ演算子で呼び出し可能な FunctionObject です。 C が range adaptor closure object であり、R が range である場合、次の 2 つの式は 同値です。
C(R) R | C
2 つの range adaptor closure object は、operator| によって連鎖して、別の range adaptor closure object を生成できます。 C と D が range adaptor closure object である場合、C | D は、次のプロパティを持つ range adaptor closure object E を生成します。
- E は、それぞれ std::forward<decltype((C))>(C) および std::forward<decltype((D))>(D) から direct-non-list-initialized された C と D のコピーを格納します。このような初期化が無効な場合、C | D も無効になります。
- c と d が格納されたコピー (E と同じ constness および値カテゴリを持つ) であり、R が
rangeオブジェクトである場合、次の式は 同値です。
d(c(R)) R | c | d E(R) R | E // R | (C | D)
注: operator() は、range adaptor object closure 型の volatile 修飾版または const-volatile 修飾版ではサポートされていません。
次のオブジェクトのいずれかと同じ型を持つオブジェクト (cv-修飾子を無視) は、range adaptor closure object です。
- 単項 range adaptor object。
|
(C++23から) |
- range adaptor object による末尾引数のバインドの結果。
- operator| による 2 つの range adaptor closure object の連鎖の結果。
[編集] 関連項目
| rangeアダプタクロージャオブジェクトを定義するためのヘルパー基底クラステンプレート (クラステンプレート) |