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 |
---|---|---|---|---|
None |
Konstantin Varlamov |
✅ |
||
None |
Zoe Carver |
✅ |
||
None |
Christopher Di Bella |
✅ |
||
Christopher Di Bella |
✅ |
|||
indirectly_readable_traits
incrementable_traits
|
Christopher Di Bella |
✅ |
||
[iterator.concepts]
[range.refinements]
|
Konstantin Varlamov |
✅ |
||
[special.mem.concepts] |
Konstantin Varlamov |
✅ |
||
[iterator.concepts] |
Konstantin Varlamov |
✅ |
||
[iterator.concepts] |
Konstantin Varlamov |
✅ |
||
Zoe Carver |
✅ |
|||
iter_value_t |
Zoe Carver |
✅ |
||
Various |
✅ |
|||
[readable.traits] |
Louis Dionne |
✅ |
||
[iterator.concepts] |
Louis Dionne |
✅ |
||
[alg.req]: pt. 1 |
[iterator.concepts] |
Zoe Carver and Konstantin Varlamov |
✅ |
|
[alg.req]: pt. 2 |
[iterator.concepts]
[iterator.cust.swap]
|
Zoe Carver |
✅ |
|
[alg.req]: pt. 3 |
[projected] |
Nikolas Klauser |
✅ |
|
[alg.req]: pt. 4 |
[iterator.concepts] |
Konstantin Varlamov |
✅ |
|
[iterator.traits] |
Eric Fiselier |
✅ |
||
[iterator.concepts] |
Christopher Di Bella and Arthur O’Dwyer |
✅ |
||
[iterator.concepts]
[iterator.cust.swap]
[iterator.cust.move]
|
Various |
✅ |
||
[predef.iterators] |
Arthur O’Dwyer |
✅ |
||
[iterator.concepts]
[iterator.cust.swap]
[iterator.cust.move]
|
Zoe Carver |
✅ |
||
No dependencies |
Zoe Carver |
✅ |
||
[iterator.concepts]
[iterator.cust.swap]
[iterator.cust.move]
[default.sentinels]
|
Zoe Carver |
✅ |
||
[default.sentinels] |
Various |
✅ |
||
[iterator.concepts] |
Various |
✅ |
||
[range.access] |
Christopher Di Bella |
✅ |
||
[range.primitives]
[range.range]
|
Christopher Di Bella |
✅ |
||
[range.range] |
Louis Dionne |
✅ |
||
[range.range] |
Christopher Di Bella |
✅ |
||
[range.range] |
Louis Dionne |
✅ |
||
[range.range]
[iterator.concept.input]
|
Zoe Carver |
✅ |
||
[ranges.range]
[range.view]
[range.iterator.op.prev]
[range.refinements]
|
Zoe Carver |
✅ |
||
[view.interface] |
Zoe Carver |
✅ |
||
[range.range]
[range.subrange]
|
Christopher Di Bella |
✅ |
||
[view.interface] |
Zoe Carver |
✅ |
||
[view.interface] |
Zoe Carver |
✅ |
||
[range.all] |
Zoe Carver |
✅ |
||
[range.subrange], [range.view.ref] |
Zoe Carver |
✅ |
||
[view.interface] |
Zoe Carver |
✅ |
||
[range.all] |
Louis Dionne |
✅ |
||
[range.all] |
Zoe Carver |
✅ |
||
[range.all] |
Zoe Carver |
✅ |
||
[range.all] |
Zoe Carver |
✅ |
||
[range.all] |
Zoe Carver and Konstantin Varlamov |
✅ |
||
[range.subrange] |
Zoe Carver |
✅ |
||
[range.all] |
Zoe Carver |
✅ |
||
[range.all] |
Zoe Carver |
✅ |
Category |
Algorithm |
Assignee |
CL |
Complete |
---|---|---|---|---|
Search |
any_of |
Nikolas Klauser |
✅ |
|
Search |
all_of |
Nikolas Klauser |
✅ |
|
Search |
none_of |
Nikolas Klauser |
✅ |
|
Search |
find |
Nikolas Klauser |
✅ |
|
Search |
find_if |
Nikolas Klauser |
✅ |
|
Search |
find_if_not |
Nikolas Klauser |
✅ |
|
Search |
find_first_of |
Nikolas Klauser |
✅ |
|
Search |
adjacent_find |
Nikolas Klauser |
✅ |
|
Search |
mismatch |
Nikolas Klauser |
✅ |
|
Search |
equal |
Nikolas Klauser |
✅ |
|
Search |
lexicographical_compare |
Nikolas Klauser |
✅ |
|
Search |
partition_point |
Konstantin Varlamov |
✅ |
|
Search |
lower_bound |
Nikolas Klauser |
✅ |
|
Search |
upper_bound |
Nikolas Klauser |
✅ |
|
Search |
equal_range |
Hui Xie |
✅ |
|
Search |
binary_search |
Nikolas Klauser |
✅ |
|
Search |
min |
Nikolas Klauser |
✅ |
|
Search |
max |
Nikolas Klauser |
✅ |
|
Search |
minmax |
Nikolas Klauser |
✅ |
|
Search |
min_element |
Nikolas Klauser |
✅ |
|
Search |
max_element |
Nikolas Klauser |
✅ |
|
Search |
minmax_element |
Nikolas Klauser |
✅ |
|
Search |
count |
Nikolas Klauser |
✅ |
|
Search |
count_if |
Nikolas Klauser |
✅ |
|
Search |
search |
Nikolas Klauser |
✅ |
|
Search |
search_n |
Nikolas Klauser |
✅ |
|
Search |
find_end |
Nikolas Klauser |
✅ |
|
Read-only |
is_partitioned |
Nikolas Klauser |
✅ |
|
Read-only |
is_sorted |
Nikolas Klauser |
✅ |
|
Read-only |
is_sorted_until |
Nikolas Klauser |
✅ |
|
Read-only |
includes |
Hui Xie |
✅ |
|
Read-only |
is_heap |
Konstantin Varlamov |
✅ |
|
Read-only |
is_heap_until |
Konstantin Varlamov |
✅ |
|
Read-only |
clamp |
Nikolas Klauser |
✅ |
|
Read-only |
is_permutation |
Nikolas Klauser |
✅ |
|
Read-only |
for_each |
Nikolas Klauser |
✅ |
|
Read-only |
for_each_n |
Nikolas Klauser |
✅ |
|
Write |
copy |
Nikolas Klauser |
✅ |
|
Write |
copy_if |
Nikolas Klauser |
✅ |
|
Write |
copy_n |
Nikolas Klauser |
✅ |
|
Write |
copy_backward |
Nikolas Klauser |
✅ |
|
Write |
move |
Nikolas Klauser |
✅ |
|
Write |
move_backward |
Nikolas Klauser |
✅ |
|
Write |
fill |
Nikolas Klauser |
✅ |
|
Write |
fill_n |
Nikolas Klauser |
✅ |
|
Write |
transform |
Nikolas Klauser |
✅ |
|
Write |
generate |
Konstantin Varlamov |
✅ |
|
Write |
generate_n |
Konstantin Varlamov |
✅ |
|
Write |
remove_copy |
Nikolas Klauser |
✅ |
|
Write |
remove_copy_if |
Nikolas Klauser |
✅ |
|
Write |
replace |
Nikolas Klauser |
✅ |
|
Write |
replace_if |
Nikolas Klauser |
✅ |
|
Write |
replace_copy |
Nikolas Klauser |
✅ |
|
Write |
replace_copy_if |
Nikolas Klauser |
✅ |
|
Write |
swap_ranges |
Nikolas Klauser |
✅ |
|
Write |
reverse_copy |
Nikolas Klauser |
✅ |
|
Write |
rotate_copy |
Nikolas Klauser |
✅ |
|
Write |
sample |
Konstantin Varlamov |
✅ |
|
Write |
unique_copy |
Hui Xie |
✅ |
|
Write |
partition_copy |
Konstantin Varlamov |
✅ |
|
Write |
partial_sort_copy |
Konstantin Varlamov |
✅ |
|
Merge |
merge |
Hui Xie |
✅ |
|
Merge |
set_difference |
Hui Xie |
✅ |
|
Merge |
set_intersection |
Hui Xie |
✅ |
|
Merge |
set_symmetric_difference |
Hui Xie |
✅ |
|
Merge |
set_union |
Hui Xie |
✅ |
|
Permutation |
remove |
Nikolas Klauser |
✅ |
|
Permutation |
remove_if |
Nikolas Klauser |
✅ |
|
Permutation |
reverse |
Nikolas Klauser |
✅ |
|
Permutation |
rotate |
Konstantin Varlamov and Nikolas Klauser |
✅ |
|
Permutation |
shuffle |
Konstantin Varlamov |
✅ |
|
Permutation |
unique |
Hui Xie |
✅ |
|
Permutation |
partition |
Konstantin Varlamov |
✅ |
|
Permutation |
stable_partition |
Konstantin Varlamov |
✅ |
|
Permutation |
sort |
Konstantin Varlamov |
✅ |
|
Permutation |
stable_sort |
Konstantin Varlamov |
✅ |
|
Permutation |
nth_element |
Konstantin Varlamov |
✅ |
|
Permutation |
partial_sort |
Konstantin Varlamov |
✅ |
|
Permutation |
inplace_merge |
Hui Xie |
✅ |
|
Permutation |
make_heap |
Konstantin Varlamov |
✅ |
|
Permutation |
push_heap |
Konstantin Varlamov |
✅ |
|
Permutation |
pop_heap |
Konstantin Varlamov |
✅ |
|
Permutation |
sort_heap |
Konstantin Varlamov |
✅ |
|
Permutation |
next_permutation |
Nikolas Klauser |
✅ |
|
Permutation |
prev_permutation |
Nikolas Klauser |
✅ |
|
Uninitialised memory |
uninitialized_copy |
Konstantin Varlamov |
✅ |
|
Uninitialised memory |
uninitialized_copy_n |
Konstantin Varlamov |
✅ |
|
Uninitialised memory |
uninitialized_fill |
Konstantin Varlamov |
✅ |
|
Uninitialised memory |
uninitialized_fill_n |
Konstantin Varlamov |
✅ |
|
Uninitialised memory |
uninitialized_move |
Konstantin Varlamov |
✅ |
|
Uninitialised memory |
uninitialized_move_n |
Konstantin Varlamov |
✅ |
|
Uninitialised memory |
uninitialized_default_construct |
Konstantin Varlamov |
✅ |
|
Uninitialised memory |
uninitialized_default_construct_n |
Konstantin Varlamov |
✅ |
|
Uninitialised memory |
uninitialized_value_construct |
Konstantin Varlamov |
✅ |
|
Uninitialised memory |
uninitialized_value_construct_n |
Konstantin Varlamov |
✅ |
|
Uninitialised memory |
destroy |
Konstantin Varlamov |
✅ |
|
Uninitialised memory |
destroy_n |
Konstantin Varlamov |
✅ |
|
Uninitialised memory |
destroy_at |
Konstantin Varlamov |
✅ |
|
Uninitialised memory |
construct_at |
Konstantin Varlamov |
✅ |
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 |
---|---|---|---|
<ranges> |
Complete |
15.0 |
|
Input Range Adaptors |
|||
Movability Of Single-Pass Iterators |
Complete |
15.0 |
|
Rangify New Algorithms |
Complete |
15.0 |
|
Fixing Relations |
Complete |
13.0 |
|
Ranges Design Cleanup |
Complete |
15.0 |
|
Range Constructor For string_view |
Complete |
14.0 |
|
Move-Only Views |
Complete |
15.0 |
|
Helpful Pointers For contiguous_iterator |
Complete |
15.0 |
|
Iterator Difference Type And Integer Overflow |
Complete |
15.0 |
|
Views And Size Types |
Complete |
15.0 |
|
basic_istream_view::iterator Should Not Be Copyable |
|||
Range Comparison Algorithms Are Over-Constrained |
Complete |
15.0 |
|
Avoiding Template Bloat For Ranges |
Complete |
15.0 |
|
Range Adaptors For Non-Copyable Iterators |
|||
forwarding-range<T> is too subtle |
Complete |
15.0 |
|
Concept traits should be named after concepts |
Complete |
14.0 |
|
Constraining Readable Types |
Complete |
15.0 |
|
Consistency for size() functions: Add ranges::ssize |
Complete |
15.0 |
|
Wording for GB301, US296, US292, US291, and US283 |
Complete |
15.0 |
|
elements_view Needs Its Own sentinel |
|||
Fixing Issues With Range Access CPOs |
Complete |
15.0 |
|
Alternative wording for GB315 and GB316 |
Complete |
15.0 |
|
Views should not be required to be default constructible |
|||
join_view should join all views of ranges |
Complete |
14.0 |
|
Superior String Splitting |
|||
Clarifying range adaptor objects |
Complete |
14.0 |
|
Remove misuses of list-initialization from Clause 24 |
|||
What is a |
Complete |
14.0 |
|
Fix |