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