libc++ Ranges Status¶
Overview¶
This document contains the status of the C++20 Ranges library in libc++. It is used to track both the status of the sub-projects of the ranges library and who is assigned to these sub-projects. This is imperative to effective implementation so that work is not duplicated and implementors are not blocked by each other.
If you are interested in contributing to the libc++ Ranges library, please send a message to the #libcxx channel in the LLVM discord. Please do not start working on any of the assigned items below.
Sub-Projects in the One Ranges Proposal¶
Section | Description | Dependencies | Assignee | Complete |
---|---|---|---|---|
[tuple.helper] | Update <tuple> includes. | None | Konstantin Varlamov | ✅ |
[range.cmp] | None | Zoe Carver | ✅ | |
[readable.traits] | None | Christopher Di Bella | ✅ | |
[incrementable.traits] | Christopher Di Bella | ✅ | ||
[iterator.traits] | Updates to iterator_traits | indirectly_readable_traits
incrementable_traits
|
Christopher Di Bella | ✅ |
[special.mem.concepts] | [iterator.concepts]
[range.refinements]
|
Konstantin Varlamov | ✅ | |
[specialized.algorithms] | [special.mem.concepts] | Konstantin Varlamov | ✅ | |
[strings] | Adds begin/end and updates const_iterator. | [iterator.concepts] | Konstantin Varlamov | ✅ |
[views.span] | Same as [strings] | [iterator.concepts] | Konstantin Varlamov | ✅ |
[iterator.cust.move] | ranges::iter_move | Zoe Carver | ✅ | |
[iterator.cust.swap] | ranges::iter_swap | iter_value_t | Zoe Carver | ✅ |
[iterator.concepts] | Various | ✅ | ||
[indirectcallable.indirectinvocable] | [readable.traits] | Louis Dionne | ✅ | |
[projected] | ranges::projected | [iterator.concepts] | Louis Dionne | ✅ |
[alg.req]: pt. 1 | [iterator.concepts] | Zoe Carver and Konstantin Varlamov | ✅ | |
[alg.req]: pt. 2 | indirectly_swappable | [iterator.concepts]
[iterator.cust.swap]
|
Zoe Carver | ✅ |
[alg.req]: pt. 3 | indirectly_comparable | [projected] | Nikolas Klauser | ✅ |
[alg.req]: pt. 4 | [iterator.concepts] | Konstantin Varlamov | ✅ | |
[std.iterator.tags] | [iterator.traits] | Eric Fiselier | ✅ | |
[range.iter.ops] | [iterator.concepts] | Christopher Di Bella and Arthur O’Dwyer | ✅ | |
[predef.iterators] | [iterator.concepts]
[iterator.cust.swap]
[iterator.cust.move]
|
Various | ✅ | |
[move.sentinel] | move_sentinel | [predef.iterators] | Arthur O’Dwyer | ✅ |
[common.iterator] | common_iterator | [iterator.concepts]
[iterator.cust.swap]
[iterator.cust.move]
|
Zoe Carver | ✅ |
[default.sentinel] | std::default_sentinel_t | No dependencies | Zoe Carver | ✅ |
[counted.iterator] | counted_iterator | [iterator.concepts]
[iterator.cust.swap]
[iterator.cust.move]
[default.sentinels]
|
Zoe Carver | ✅ |
[stream.iterators] | [default.sentinels] | Various | ✅ | |
[range.access] | [iterator.concepts] | Various | ✅ | |
[range.range] | [range.access] | Christopher Di Bella | ✅ | |
[range.sized] | [range.primitives]
[range.range]
|
Christopher Di Bella | ✅ | |
[range.view] | [range.range] | Louis Dionne | ✅ | |
[range.refinements] | [range.range] | Christopher Di Bella | ✅ | |
[range.refinements] | ranges::viewable_range | [range.range] | Louis Dionne | ✅ |
[range.utility.helpers] | [range.range]
[iterator.concept.input]
|
Zoe Carver | ✅ | |
[view.interface] | ranges::view_interface | [ranges.range]
[range.view]
[range.iterator.op.prev]
[range.refinements]
|
Zoe Carver | ✅ |
[range.subrange] | ranges::subrange | [view.interface] | Zoe Carver | ✅ |
[range.dangling] | [range.range]
[range.subrange]
|
Christopher Di Bella | ✅ | |
[range.empty] | empty_view | [view.interface] | Zoe Carver | ✅ |
[range.single] | single_view | [view.interface] | Zoe Carver | ✅ |
[range.iota] | iota_view | [range.all] | Zoe Carver | ✅ |
[range.all] | view::all | [range.subrange], [range.view.ref] | Zoe Carver | ✅ |
[range.ref.view] | ref_view | [view.interface] | Zoe Carver | ✅ |
[range.filter] | filter_view | [range.all] | Louis Dionne | ✅ |
[range.transform] | transform_view | [range.all] | Zoe Carver | ✅ |
[range.take] | take_view | [range.all] | Zoe Carver | ✅ |
[range.join] | join_view | [range.all] | Zoe Carver | ✅ |
[range.split] | split_view (renamed to lazy_split_view by P2210) | [range.all] | Zoe Carver and Konstantin Varlamov | ✅ |
[range.counted] | view::counted | [range.subrange] | Zoe Carver | ✅ |
[range.common] | common_view | [range.all] | Zoe Carver | ✅ |
[range.reverse] | reverse_view | [range.all] | Zoe Carver | ✅ |
Category | Algorithm | Assignee | CL | Complete |
---|---|---|---|---|
Search | any_of | Nikolas Klauser | D123016 | ✅ |
Search | all_of | Nikolas Klauser | D123016 | ✅ |
Search | none_of | Nikolas Klauser | D123016 | ✅ |
Search | find | Nikolas Klauser | D121248 | ✅ |
Search | find_if | Nikolas Klauser | D121248 | ✅ |
Search | find_if_not | Nikolas Klauser | D121248 | ✅ |
Search | find_first_of | Not assigned | n/a | Not started |
Search | adjacent_find | Not assigned | n/a | Not started |
Search | mismatch | Nikolas Klauser | D117817 | ✅ |
Search | equal | Nikolas Klauser | D123681 <https://reviews.llvm.org/D123681> | ✅ |
Search | lexicographical_compare | Not assigned | n/a | Not started |
Search | partition_point | Christopher Di Bella | D105794 | Under review |
Search | lower_bound | Christopher Di Bella | D105795 | Under review |
Search | upper_bound | Christopher Di Bella | D105795 | Under review |
Search | equal_range | Christopher Di Bella | n/a | Not started |
Search | binary_search | Christopher Di Bella | n/a | Not started |
Search | min | Nikolas Klauser | D119589 | ✅ |
Search | max | Nikolas Klauser | D122002 | ✅ |
Search | minmax | Nikolas Klauser | D120637 | ✅ |
Search | min_element | Nikolas Klauser | D117025 | ✅ |
Search | max_element | Nikolas Klauser | D117523 | ✅ |
Search | minmax_element | Nikolas Klauser | D120637 | ✅ |
Search | count | Nikolas Klauser | D121523 | ✅ |
Search | count_if | Nikolas Klauser | D121523 | ✅ |
Search | search | Not assigned | n/a | Not started |
Search | search_n | Not assigned | n/a | Not started |
Search | find_end | Not assigned | n/a | Not started |
Read-only | is_partitioned | Nikolas Klauser | D124440 | ✅ |
Read-only | is_sorted | Nikolas Klauser | D125608 | ✅ |
Read-only | is_sorted_unitl | Nikolas Klauser | D125608 | ✅ |
Read-only | includes | Not assigned | n/a | Not started |
Read-only | is_heap | Not assigned | n/a | Not started |
Read-only | is_heap_until | Not assigned | n/a | Not started |
Read-only | clamp | Not assigned | n/a | Not started |
Read-only | is_permutation | Not assigned | n/a | Not started |
Read-only | for_each | Nikolas Klauser | D124332 | ✅ |
Read-only | for_each_n | Nikolas Klauser | D124332 | ✅ |
Write | copy | Nikolas Klauser | D122982 | ✅ |
Write | copy_if | Nikolas Klauser | D122982 | ✅ |
Write | copy_n | Nikolas Klauser | D122982 | ✅ |
Write | copy_backward | Nikolas Klauser | D122982 | ✅ |
Write | move | Not assigned | n/a | Not started |
Write | move_backward | Not assigned | n/a | Not started |
Write | fill | Nikolas Klauser | D123462 | ✅ |
Write | fill_n | Nikolas Klauser | D123462 | ✅ |
Write | transform | Nikolas Klauser | D122173 | ✅ |
Write | generate | Not assigned | n/a | Not started |
Write | generate_n | Not assigned | n/a | Not started |
Write | remove_copy | Not assigned | n/a | Not started |
Write | remove_copy_if | Not assigned | n/a | Not started |
Write | replace | Not assigned | n/a | Not started |
Write | replace_if | Not assigned | n/a | Not started |
Write | replace_copy | Not assigned | n/a | Not started |
Write | replace_copy_if | Not assigned | n/a | Not started |
Write | swap_ranges | Nikolas Klauser | D116303 | ✅ |
Write | reverse_copy | Not assigned | n/a | Not started |
Write | rotate_copy | Not assigned | n/a | Not started |
Write | sample | Not assigned | n/a | Not started |
Write | unique_copy | Not assigned | n/a | Not started |
Write | partition_copy | Not assigned | n/a | Not started |
Write | partial_sort_copy | Not assigned | n/a | Not started |
Merge | merge | Not assigned | n/a | Not started |
Merge | set_difference | Not assigned | n/a | Not started |
Merge | set_intersection | Not assigned | n/a | Not started |
Merge | set_symmetric_difference | Not assigned | n/a | Not started |
Merge | set_union | Not assigned | n/a | Not started |
Permutation | remove | Not assigned | n/a | Not started |
Permutation | remove_if | Not assigned | n/a | Not started |
Permutation | reverse | Nikolas Klauser | D125752 | ✅ |
Permutation | rotate | Not assigned | n/a | Not started |
Permutation | shuffle | Not assigned | n/a | Not started |
Permutation | unique | Not assigned | n/a | Not started |
Permutation | partition | Not assigned | n/a | Not started |
Permutation | stable_partition | Not assigned | n/a | Not started |
Permutation | sort | Not assigned | n/a | Not started |
Permutation | stable_sort | Not assigned | n/a | Not started |
Permutation | partial_sort | Not assigned | n/a | Not started |
Permutation | nth_element | Not assigned | n/a | Not started |
Permutation | inplace_merge | Not assigned | n/a | Not started |
Permutation | make_heap | Not assigned | n/a | Not started |
Permutation | push_heap | Not assigned | n/a | Not started |
Permutation | pop_heap | Not assigned | n/a | Not started |
Permutation | sort_heap | Not assigned | n/a | Not started |
Permutation | prev_permutation | Not assigned | n/a | Not started |
Permutation | next_permutation | Not assigned | n/a | Not started |
Uninitialised memory | uninitialized_copy | Konstantin Varlamov | D116023 | ✅ |
Uninitialised memory | uninitialized_copy_n | Konstantin Varlamov | D116023 | ✅ |
Uninitialised memory | uninitialized_fill | Konstantin Varlamov | D115626 | ✅ |
Uninitialised memory | uninitialized_fill_n | Konstantin Varlamov | D115626 | ✅ |
Uninitialised memory | uninitialized_move | Konstantin Varlamov | D116023 | ✅ |
Uninitialised memory | uninitialized_move_n | Konstantin Varlamov | D116023 | ✅ |
Uninitialised memory | uninitialized_default_construct | Konstantin Varlamov | D115315 | ✅ |
Uninitialised memory | uninitialized_default_construct_n | Konstantin Varlamov | D115315 | ✅ |
Uninitialised memory | uninitialized_value_construct | Konstantin Varlamov | D115626 | ✅ |
Uninitialised memory | uninitialized_value_construct_n | Konstantin Varlamov | D115626 | ✅ |
Uninitialised memory | destroy | Konstantin Varlamov | D116078 | ✅ |
Uninitialised memory | destroy_n | Konstantin Varlamov | D116078 | ✅ |
Uninitialised memory | destroy_at | Konstantin Varlamov | D116078 | ✅ |
Uninitialised memory | construct_at | Konstantin Varlamov | D116078 | ✅ |
Misc. Items and TODOs¶
(Note: files with required updates will contain the TODO at the beginning of the list item so they can be easily found via global search.)
- TODO(XX_SPACESHIP_CONCEPTS): when spaceship support is added to various STL types, we need to update some concept tests.
Paper and Issue Status¶
(Note: stolen from MSVC here.)
Number | Name | Status | First released version | ||||
---|---|---|---|---|---|---|---|
P0896R4 | <ranges> | ||||||
P1035R7 | Input Range Adaptors | ||||||
P1207R4 | Movability Of Single-Pass Iterators | Complete | 15.0 | ||||
P1243R4 | Rangify New Algorithms | ||||||
P1248R1 | Fixing Relations | Complete | 13.0 | ||||
P1252R2 | Ranges Design Cleanup | ||||||
P1391R4 | Range Constructor For string_view | Complete | 14.0 | ||||
P1456R1 | Move-Only Views | Complete | 15.0 | ||||
P1474R1 | Helpful Pointers For contiguous_iterator | Complete | 15.0 | ||||
P1522R1 | Iterator Difference Type And Integer Overflow | Complete | 15.0 | ||||
P1523R1 | Views And Size Types | Complete | 15.0 | ||||
P1638R1 | basic_istream_view::iterator Should Not Be Copyable | ||||||
P1716R3 | Range Comparison Algorithms Are Over-Constrained | ||||||
P1739R4 | Avoiding Template Bloat For Ranges | Complete | 15.0 | ||||
P1862R1 | Range Adaptors For Non-Copyable Iterators | ||||||
P1870R1 | forwarding-range<T> is too subtle | Complete | 15.0 | ||||
P1871R1 | disable_sized_sentinel_for | Complete | 14.0 | ||||
P1878R1 | Constraining Readable Types | Complete | 15.0 | ||||
P1970R2 | Consistency for size() functions: Add ranges::ssize | Complete | 15.0 | ||||
P1983R0 | Wording for GB301 | US296 | US292 | US291 | and US283 | Complete | 15.0 |
P1994R1 | elements_view Needs Its Own sentinel | ||||||
P2091R0 | Fixing Issues With Range Access CPOs | ||||||
P2106R0 | Range Algorithm Result Types | ||||||
P2325R3 | Views should not be required to be default constructible | ||||||
P2328R1 | join_view should join all views of ranges | Complete | 14.0 | ||||
P2210R2 | Superior String Splitting | ||||||
P2281R1 | Clarifying range adaptor objects | Complete | 14.0 | ||||
P2367R0 | Remove misuses of list-initialization from Clause 24 | ||||||
P2415 | What is a view |
Complete | 14.0 | ||||
P2432 | Fix istream_view |