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

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