Namespaces
Variants

C++ named requirements: RangeAdaptorClosureObject (since C++20)

From cppreference.net
C++ named requirements

レンジアダプタクロージャオブジェクト は、パイプ演算子を介して呼び出し可能な FunctionObject s です: C がレンジアダプタクロージャオブジェクトで、 R range である場合、以下の2つの式は 等価 です:

C(R)
R | C

2つのレンジアダプタクロージャオブジェクトは、 operator | でチェインして別のレンジアダプタクロージャオブジェクトを生成できます: C D がレンジアダプタクロージャオブジェクトである場合、 C | D は以下の特性を持つレンジアダプタクロージャオブジェクト E を生成します:

  • E C D のコピーを保持し、それぞれ std:: forward < decltype ( ( C ) ) > ( C ) および std:: forward < decltype ( ( D ) ) > ( D ) から直接非リスト初期化されます。この初期化が無効な場合、 C | D も無効となります。
  • c d を( E と同じconst性と値カテゴリを持つ)保存されたコピーとし、 R range オブジェクトとすると、以下の式は 等価 です:
d(c(R))
R | c | d
E(R)
R | E // R | (C | D)

注記: operator ( ) は、volatile修飾またはconst-volatile修飾された範囲アダプタオブジェクトクロージャ型のバージョンではサポートされていません。

以下のオブジェクトのいずれかと同じ型(cv修飾を無視)を持つオブジェクトは、レンジアダプタクロージャオブジェクトです:

  • 単項範囲アダプタオブジェクト,
(C++23以降)
  • 範囲アダプタオブジェクトによる末尾引数のバインド結果、および
  • 2つの範囲アダプタクロージャオブジェクトを operator | でチェインした結果

関連項目

レンジアダプタクロージャオブジェクトを定義するためのヘルパーベースクラステンプレート
(クラステンプレート)