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 |
---|---|---|---|---|
Update <tuple> includes. |
None |
Konstantin Varlamov |
Not started |
|
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 |
✅ |
||
Adds begin/end and updates const_iterator. |
[iterator.concepts] |
Unassigned |
Not started |
|
Same as [strings] |
[iterator.concepts] |
Unassigned |
Not started |
|
Zoe Carver |
✅ |
|||
iter_value_t |
Zoe Carver |
✅ |
||
Various |
✅ |
|||
[readable.traits] |
Louis Dionne |
✅ |
||
[iterator.concepts] |
Louis Dionne |
✅ |
||
[common.alg.req]: pt. 1 |
[iterator.concepts] |
Zoe Carver |
In progress |
|
[common.alg.req]: pt. 2 |
[iterator.concepts]
[iterator.cust.swap]
|
Zoe Carver |
✅ |
|
[common.alg.req]: pt. 3 |
[projected] |
Nikolas Klauser |
✅ |
|
[common.alg.req]: pt. 4 |
permutable
mergeable
sortable
|
[iterator.concepts] |
Unassigned |
Not started |
[iterator.traits] |
Unassigned |
Not started |
||
[iterator.concepts] |
Christopher Di Bella and Arthur O’Dwyer |
✅ |
||
Updates to reverse_iterator
Updates to back_insert_iterator
Updates to front_insert_iterator
Updates to move_iterator
|
[iterator.concepts]
[iterator.cust.swap]
[iterator.cust.move]
|
Unassigned |
Not started |
|
move_sentinel |
[predef.iterators] |
Unassigned |
Not started |
|
[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 |
✅ |
||
Updates to istream_iterator
Updates to ostream_iterator
Updates to istreambuf_iterator
Updates to ostreambuf_iterator
|
[default.sentinels] |
Unassigned |
Not started |
|
ranges::rbegin
ranges::rend
ranges::crbegin
ranges::crend
|
[iterator.concepts] |
Christopher Di Bella and Zoe Carver |
In progress |
|
[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 |
Under review |
||
[range.all] |
Zoe Carver |
✅ |
||
[range.all] |
Zoe Carver |
✅ |
||
[range.all] |
Zoe Carver |
✅ |
||
[range.all] |
Zoe Carver |
In progress |
||
[range.subrange] |
Zoe Carver |
✅ |
||
[range.all] |
Zoe Carver |
✅ |
||
[range.all] |
Zoe Carver |
✅ |
Category |
Algorithm |
Assignee |
CL |
Complete |
---|---|---|---|---|
Search |
any_of |
Christopher Di Bella |
||
Search |
all_of |
Christopher Di Bella |
||
Search |
none_of |
Christopher Di Bella |
||
Search |
find |
Christopher Di Bella |
||
Search |
find_if |
Christopher Di Bella |
||
Search |
find_if_not |
Christopher Di Bella |
||
Search |
find_first_of |
Not assigned |
n/a |
Not started |
Search |
adjacent_find |
Not assigned |
n/a |
Not started |
Search |
mismatch |
Not assigned |
n/a |
Not started |
Search |
equal |
Not assigned |
n/a |
Not started |
Search |
lexicographical_compare |
Not assigned |
n/a |
Not started |
Search |
partition_point |
Christopher Di Bella |
Under review |
|
Search |
lower_bound |
Christopher Di Bella |
Under review |
|
Search |
upper_bound |
Christopher Di Bella |
Under review |
|
Search |
equal_range |
Christopher Di Bella |
n/a |
Not started |
Search |
binary_search |
Christopher Di Bella |
n/a |
Not started |
Search |
min |
Not assigned |
n/a |
Not started |
Search |
max |
Not assigned |
n/a |
Not started |
Search |
minmax |
Not assigned |
n/a |
Not started |
Search |
min_element |
Not assigned |
n/a |
Not started |
Search |
max_element |
Not assigned |
n/a |
Not started |
Search |
minmax_element |
Not assigned |
n/a |
Not started |
Search |
count |
Not assigned |
n/a |
Not started |
Search |
count_if |
Not assigned |
n/a |
Not started |
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 |
Christopher Di Bella |
Under review |
|
Read-only |
is_sorted |
Not assigned |
n/a |
Not started |
Read-only |
is_sorted_unitl |
Not assigned |
n/a |
Not started |
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 |
Not assigned |
n/a |
Not started |
Read-only |
for_each_n |
Not assigned |
n/a |
Not started |
Write |
copy |
Not assigned |
n/a |
Not started |
Write |
copy_if |
Not assigned |
n/a |
Not started |
Write |
copy_n |
Not assigned |
n/a |
Not started |
Write |
copy_backward |
Not assigned |
n/a |
Not started |
Write |
move |
Not assigned |
n/a |
Not started |
Write |
move_backward |
Not assigned |
n/a |
Not started |
Write |
fill |
Not assigned |
n/a |
Not started |
Write |
fill_n |
Not assigned |
n/a |
Not started |
Write |
transform |
Not assigned |
n/a |
Not started |
Write |
generate |
Not assigned |
n/a |
Not started |
Write |
generate_nNot 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 |
Not assigned |
n/a |
Not started |
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 |
Not assigned |
n/a |
Not started |
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 |
✅ |
|
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> |
|||
Input Range Adaptors |
|||
Movability Of Single-Pass Iterators |
|||
Rangify New Algorithms |
|||
Fixing Relations |
Complete |
13.0 |
|
Ranges Design Cleanup |
|||
Range Constructor For string_view |
Complete |
14.0 |
|
Move-Only Views |
|||
Helpful Pointers For contiguous_iterator |
|||
Iterator Difference Type And Integer Overflow |
|||
Views And Size Types |
|||
basic_istream_view::iterator Should Not Be Copyable |
|||
Range Comparison Algorithms Are Over-Constrained |
|||
Avoiding Template Bloat For Ranges |
|||
Range Adaptors For Non-Copyable Iterators |
|||
safe_range |
|||
disable_sized_sentinel_for |
Complete |
14.0 |
|
Constraining Readable Types |
|||
ranges::ssize |
|||
Fixing Minor Ranges Issues |
|||
elements_view Needs Its Own sentinel |
|||
Fixing Issues With Range Access CPOs |
|||
Range Algorithm Result Types |
|||
Views should not be required to be default constructible |
|||
join_view should join all views of ranges |
|||
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 |