libc++ Ranges Status


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
Christopher Di Bella
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
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
[move.sentinel] move_sentinel [predef.iterators] Arthur O’Dwyer
[common.iterator] common_iterator
Zoe Carver
[default.sentinel] std::default_sentinel_t No dependencies Zoe Carver
[counted.iterator] counted_iterator
Zoe Carver
[stream.iterators] [default.sentinels] Various
[range.access] [iterator.concepts] Various
[range.range] [range.access] Christopher Di Bella
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
Zoe Carver
[view.interface] ranges::view_interface
Zoe Carver
[range.subrange] ranges::subrange [view.interface] Zoe Carver
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 Nikolas Klauser D126529
Search adjacent_find Nikolas Klauser D126610
Search mismatch Nikolas Klauser D117817
Search equal Nikolas Klauser D123681
Search lexicographical_compare Nikolas Klauser D127130
Search partition_point Konstantin Varlamov D130070
Search lower_bound Nikolas Klauser D121964
Search upper_bound Nikolas Klauser D121964
Search equal_range Hui Xie D129796
Search binary_search Nikolas Klauser D121964
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 Nikolas Klauser D124079
Search search_n Nikolas Klauser D124079
Search find_end Nikolas Klauser D124079
Read-only is_partitioned Nikolas Klauser D124440
Read-only is_sorted Nikolas Klauser D125608
Read-only is_sorted_until Nikolas Klauser D125608
Read-only includes Hui Xie D130116
Read-only is_heap Konstantin Varlamov D130547
Read-only is_heap_until Konstantin Varlamov D130547
Read-only clamp Nikolas Klauser D126193
Read-only is_permutation Nikolas Klauser D127194
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 Nikolas Klauser D126616
Write move_backward Nikolas Klauser D126616
Write fill Nikolas Klauser D123462
Write fill_n Nikolas Klauser D123462
Write transform Nikolas Klauser D122173
Write generate Konstantin Varlamov D130552
Write generate_n Konstantin Varlamov D130552
Write remove_copy Nikolas Klauser D130599
Write remove_copy_if Nikolas Klauser D130599
Write replace Nikolas Klauser D126283
Write replace_if Nikolas Klauser D126283
Write replace_copy Nikolas Klauser D129806
Write replace_copy_if Nikolas Klauser D129806
Write swap_ranges Nikolas Klauser D116303
Write reverse_copy Nikolas Klauser D127211
Write rotate_copy Nikolas Klauser D127211
Write sample Konstantin Varlamov D130865
Write unique_copy Hui Xie D130404
Write partition_copy Konstantin Varlamov D130070
Write partial_sort_copy Konstantin Varlamov D130532
Merge merge Hui Xie D128611
Merge set_difference Hui Xie D128983
Merge set_intersection Hui Xie D129233
Merge set_symmetric_difference Hui Xie D129520
Merge set_union Hui Xie D129657
Permutation remove Nikolas Klauser D128618
Permutation remove_if Nikolas Klauser D128618
Permutation reverse Nikolas Klauser D125752
Permutation rotate Konstantin Varlamov and Nikolas Klauser D130758
Permutation shuffle Konstantin Varlamov D130321
Permutation unique Hui Xie D130404
Permutation partition Konstantin Varlamov D129624
Permutation stable_partition Konstantin Varlamov D129624
Permutation sort Konstantin Varlamov D127557
Permutation stable_sort Konstantin Varlamov D127834
Permutation nth_element Konstantin Varlamov D128149
Permutation partial_sort Konstantin Varlamov D128744
Permutation inplace_merge Hui Xie D130627
Permutation make_heap Konstantin Varlamov D128115
Permutation push_heap Konstantin Varlamov D128115
Permutation pop_heap Konstantin Varlamov D128115
Permutation sort_heap Konstantin Varlamov D128115
Permutation next_permutation Nikolas Klauser D129859
Permutation prev_permutation Nikolas Klauser D129859
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> Complete 15.0
P1035R7 Input Range Adaptors    
P1207R4 Movability Of Single-Pass Iterators Complete 15.0
P1243R4 Rangify New Algorithms Complete 15.0
P1248R1 Fixing Relations Complete 13.0
P1252R2 Ranges Design Cleanup Complete 15.0
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 Complete 15.0
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 Concept traits should be named after concepts 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 Complete 15.0
P2106R0 Alternative wording for GB315 and GB316 Complete 15.0
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