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

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]

[iterator.concepts]
[range.refinements]

Konstantin Varlamov

[specialized.algorithms]

[special.mem.concepts]

Konstantin Varlamov

[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]

Nikolas Klauser

[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 and Arthur O’Dwyer

[predef.iterators]

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]

move_sentinel

[predef.iterators]

Unassigned

Not started

[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]

Updates to istream_iterator
Updates to ostream_iterator
Updates to istreambuf_iterator
Updates to ostreambuf_iterator

[default.sentinels]

Unassigned

Not started

[range.access]

[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]

[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

Under review

[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

[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

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

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

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

Complete

14.0

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

Complete

14.0

P2367R0

Remove misuses of list-initialization from Clause 24

P2415

What is a view

Complete

14.0

P2432

Fix istream_view