C++ именованные требования: RangeAdaptorClosureObject (с C++20)
Объекты-замыкания адаптера диапазонов являются FunctionObjects, которые вызываются с помощью оператора конвейера: если 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— сохранённые копии (с той же квалификацией const и категорией значения, что иE), аR— объектrange, следующие выражения эквивалентны:
d(c(R)) R | c | d E(R) R | E // R | (C | D)
Примечание: operator() не поддерживается для версий объектов-замыканий адаптера диапазонов с квалификатором volatile или const-volatile.
Объекты, тип которых совпадает с одним из следующих типов (без учёта cv-квалификаций), являются объектами-замыканиями адаптера диапазонов:
- объекты-адаптеры диапазонов с одним аргументом,
| (с C++23) |
- результаты привязки аргументов из хвоста с помощью объектов адаптера диапазонов, и
- результаты объединения двух объектов-замыканий адаптера диапазонов с помощью
operator|.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/named_req/RangeAdaptorClosureObject