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   |