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 Unassigned Not started
[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]
no-throw-input-iterator
no-throw-sentinel-for
no-throw-input-range
no-throw-forward-iterator
no-throw-forward-range
[iterator.concepts]
[range.refinements]
Konstantin Varlamov
[specialized.algorithms]
ranges::uninitialized_default_construct
ranges::uninitialized_default_construct_n
ranges::uninitialized_value_construct
ranges::uninitialized_value_construct_n
ranges::uninitialized_copy
ranges::uninitialized_copy_n
ranges::uninitialized_move
ranges::uninitialized_move_n
ranges::uninitialized_fill
ranges::uninitialized_fill_n
ranges::construct_at
ranges::destroy
ranges::destroy_at
ranges::destroy_n
[special.mem.concepts] Konstantin Varlamov Not started
[strings] Adds begin/end and updates const_iterator. [iterator.concepts] Unassigned Not started
[views.span] Same as [strings] [iterator.concepts] Unassigned Not started
[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
[common.alg.req]: pt. 1
indirectly_copyable
indirectly_copyable_storable
[iterator.concepts] Zoe Carver In progress
[common.alg.req]: pt. 2 indirectly_swappable
[iterator.concepts]
[iterator.cust.swap]
Zoe Carver
[common.alg.req]: pt. 3 indirectly_comparable [projected] Louis Dionne Not started
[common.alg.req]: pt. 4
permutable
mergeable
sortable
[iterator.concepts] Unassigned Not started
[std.iterator.tags]   [iterator.traits] Unassigned Not started
[range.iter.ops] [iterator.concepts] Christopher Di Bella In progress
[predef.iterators] Updates to predefined iterators.
[iterator.concepts]
[iterator.cust.swap]
[iterator.cust.move]
Unassigned Not started
[move.sentinel]   [predef.iterators] Unassigned Not started
[common.iterator]  
[iterator.concepts]
[iterator.cust.swap]
[iterator.cust.move]
Zoe Carver
[default.sentinels] std::default_sentinel_t. No dependencies Zoe Carver
[counted.iterator]  
[iterator.concepts]
[iterator.cust.swap]
[iterator.cust.move]
[default.sentinels]
Zoe Carver
[stream.iterators]   [default.sentinels] Unassigned Not started
[range.access]
ranges::rbegin
ranges::rend
ranges::crbegin
ranges::crend
ranges::cdata
[iterator.concepts] Christopher Di Bella and Zoe Carver In progress
[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]
simple-view
has-arrow
not-same-as
[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]
ranges::dangling
ranges::borrowed_iterator_t
ranges::borrowed_subrange_t
[range.range]
[range.subrange]
Christopher Di Bella
[range.all] view::all [range.subrange], [range.view.ref] Zoe Carver
[range.view.ref] ref-view [view.interface] Zoe Carver
[range.filter] filter_view [range.all] Louis Dionne Not started
[range.transform] transform_view [range.all] Zoe Carver
[range.iota] iota_view [range.all] Zoe Carver
[range.take] take_view [range.all] Zoe Carver
[range.join] join_view [range.all] Zoe Carver
[range.empty] empty_view [view.interface] Zoe Carver
[range.single] single_view [view.interface] Zoe Carver
[range.split] split_view [range.all] Zoe Carver In Progress
[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 Christopher Di Bella D105793  
Search all_of Christopher Di Bella D105793  
Search none_of Christopher Di Bella D105793  
Search find Christopher Di Bella D105456  
Search find_if Christopher Di Bella D105792  
Search find_if_not Christopher Di Bella D105792  
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 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 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 D105794 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 var-const n/a Not started
Uninitialised memory uninitialized_copy_n var-const n/a Not started
Uninitialised memory uninitialized_fill var-const n/a Not started
Uninitialised memory uninitialized_fill_n var-const n/a Not started
Uninitialised memory uninitialized_move var-const n/a Not started
Uninitialised memory uninitialized_move_n var-const n/a Not started
Uninitialised memory uninitialized_default_construct var-const n/a Not started
Uninitialised memory uninitialized_default_construct_n var-const n/a Not started
Uninitialised memory uninitialized_value_construct var-const n/a Not started
Uninitialised memory uninitialized_value_construct_n var-const n/a Not started
Uninitialised memory destroy var-const n/a Not started
Uninitialised memory destroy_n var-const n/a Not started
Uninitialised memory destroy_at var-const n/a Not started
Uninitialised memory construct_at var-const n/a Not started

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    
P1243R4 Rangify New Algorithms    
P1248R1 Fixing Relations    
P1252R2 Ranges Design Cleanup    
P1391R4 Range Constructor For string_view    
P1456R1 Move-Only Views    
P1474R1 Helpful Pointers For contiguous_iterator    
P1522R1 Iterator Difference Type And Integer Overflow    
P1523R1 Views And Size Types    
P1638R1 basic_istream_view::iterator Should Not Be Copyable    
P1716R3 Range Comparison Algorithms Are Over-Constrained    
P1739R4 Avoiding Template Bloat For Ranges    
P1862R1 Range Adaptors For Non-Copyable Iterators    
P1870R1 safe_range    
P1871R1 disable_sized_sentinel_for    
P1878R1 Constraining Readable Types    
P1970R2 ranges::ssize    
P1983R0 Fixing Minor Ranges Issues    
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    
P2210R2 Superior String Splitting    
P2281R1 Clarifying range adaptor objects    
P2367R0 Remove misuses of list-initialization from Clause 24    
       
P2415 What is a view    
P2432 Fix istream_view