This patch finalizes the std::ranges::range_adaptor_closure
class template from https://wg21.link/P2387R3.
// [range.adaptor.object], range adaptor objects
template<class D>
requires is_class_v<D> && same_as<D, remove_cv_t<D>>
class range_adaptor_closure { };
The current implementation of __range_adaptor_closure was introduced
in ee44dd8062 and has served as the
foundation for the range adaptors in libc++ for a while. This patch
keeps its implementation, with the exception of the following changes:
- __range_adaptor_closure now includes the missing constraints
`is_class_v<D> && same_as<D, remove_cv_t<D>>` to restrict the
type of class that can inherit from it. (https://eel.is/c++draft/ranges.syn)
- The operator| of __range_adaptor_closure no longer requires its
first argument to model viewable_range. (https://eel.is/c++draft/range.adaptor.object#1)
- The _RangeAdaptorClosure concept is refined to exclude cases where
T models range or where T has base classes of type range_adaptor_closure<U>
for another type U. (https://eel.is/c++draft/range.adaptor.object#2)
520 B
520 B
| 1 | Standard | Name | Assignee | CL | Status |
|---|---|---|---|---|---|
| 2 | C++23 | `ranges::to <https://wg21.link/P1206R7>`_ | Konstantin Varlamov | `D142335 <https://reviews.llvm.org/D142335>`_ | Complete |
| 3 | C++23 | `Pipe support for user-defined range adaptors <https://wg21.link/P2387R3>`_ | Louis Dionne, Jakub Mazurkiewicz, and Xiaoyang Liu | Various | Complete |
| 4 | C++23 | `Formatting Ranges <https://wg21.link/P2286R8>`_ | Mark de Wever | Various | Complete |
| 5 | C++20 | `Stashing stashing iterators for proper flattening <https://wg21.link/P2770R0>`_ | Jakub Mazurkiewicz | Various | In progress |