Namespaces
Variants

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

From cppreference.net
C++ named requirements

范围适配器闭包对象 是通过管道运算符调用的 函数对象 :若 C 是范围适配器闭包对象且 R range ,则以下两种表达式 等价

C(R)
R | C

两个范围适配器闭包对象可以通过 operator | 进行链式组合,生成另一个范围适配器闭包对象:若 C D 均为范围适配器闭包对象,则 C | D 将生成具有以下特性的范围适配器闭包对象 E

  • E 存储 C D 的副本,分别从 std:: forward < decltype ( ( C ) ) > ( C ) std:: forward < decltype ( ( D ) ) > ( D ) 直接非列表初始化。若此类初始化无效,则 C | D 同样无效。
  • c d 为存储的副本(具有与 E 相同的常量性和值类别),且 R range 对象,则下列表达式是 等价的
d(c(R))
R | c | d
E(R)
R | E // R | (C | D)

说明: operator ( ) 不支持对具有 volatile 限定或 const-volatile 限定的范围适配器对象闭包类型进行重载。

其类型与下列对象之一相同的对象(忽略 cv 限定符)属于范围适配器闭包对象:

  • 一元范围适配器对象,
(since C++23)
  • 通过范围适配器对象绑定尾部参数的结果,以及
  • 通过 operator | 链接两个范围适配器闭包对象的结果。

参见

用于定义范围适配器闭包对象的辅助基类模板
(类模板)