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