libc++ C++20 Status

Overview

In July 2017, the C++ standard committee created a draft for the next version of the C++ standard, initially known as “C++2a”. In September 2020, the C++ standard committee approved this draft, and sent it to ISO for approval as C++20.

This page shows the status of libc++; the status of clang’s support of the language features is here.

Attention

Features in unreleased drafts of the standard are subject to change.

The groups that have contributed papers:

  • CWG - Core Language Working group

  • LWG - Library working group

  • SG1 - Study group #1 (Concurrency working group)

Note

“Nothing to do” means that no library changes were needed to implement this change.

Paper Status

Paper #

Group

Paper Name

Meeting

Status

First released version

P0463R1

LWG

Endian just Endian

Toronto

Complete

7.0

P0674R1

LWG

Extending make_shared to Support Arrays

Toronto

P0020R6

LWG

Floating Point Atomic

Albuquerque

P0053R7

LWG

C++ Synchronized Buffered Ostream

Albuquerque

P0202R3

LWG

Add constexpr modifiers to functions in <algorithm> and <utility> Headers

Albuquerque

Complete

12.0

P0415R1

LWG

Constexpr for std::complex

Albuquerque

In Progress

7.0

P0439R0

LWG

Make std::memory_order a scoped enumeration

Albuquerque

Complete

P0457R2

LWG

String Prefix and Suffix Checking

Albuquerque

Complete

6.0

P0550R2

LWG

Transformation Trait remove_cvref

Albuquerque

Complete

6.0

P0600R1

LWG

nodiscard in the Library

Albuquerque

In Progress 1

7.0

P0616R0

LWG

de-pessimize legacy <numeric> algorithms with std::move

Albuquerque

Complete

12.0

P0653R2

LWG

Utility to convert a pointer to a raw pointer

Albuquerque

Complete

6.0

P0718R2

LWG

Atomic shared_ptr

Albuquerque

P0767R1

CWG

Deprecate POD

Albuquerque

Complete

7.0

P0768R1

CWG

Library Support for the Spaceship (Comparison) Operator

Albuquerque

Complete

P0777R1

LWG

Treating Unnecessary decay

Albuquerque

Complete

7.0

P0122R7

LWG

<span>

Jacksonville

Complete

7.0

P0355R7

LWG

Extending chrono to Calendars and Time Zones

Jacksonville

In Progress

P0551R3

LWG

Thou Shalt Not Specialize std Function Templates!

Jacksonville

Complete

11.0

P0753R2

LWG

Manipulators for C++ Synchronized Buffered Ostream

Jacksonville

P0754R2

LWG

<version>

Jacksonville

Complete

7.0

P0809R0

LWG

Comparing Unordered Containers

Jacksonville

Nothing To Do

P0858R0

LWG

Constexpr iterator requirements

Jacksonville

P0905R1

CWG

Symmetry for spaceship

Jacksonville

P0966R1

LWG

string::reserve Should Not Shrink

Jacksonville

Complete 2

12.0

P0019R8

LWG

Atomic Ref

Rapperswil

P0458R2

LWG

Checking for Existence of an Element in Associative Containers

Rapperswil

Complete

13.0

P0475R1

LWG

LWG 2511: guaranteed copy elision for piecewise construction

Rapperswil

Complete

P0476R2

LWG

Bit-casting object representations

Rapperswil

P0528R3

CWG

The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange

Rapperswil

P0542R5

CWG

Support for contract based programming in C++

Rapperswil

Removed in Cologne

n/a

P0556R3

LWG

Integral power-of-2 operations

Rapperswil

Complete

9.0

P0619R4

LWG

Reviewing Deprecated Facilities of C++17 for C++20

Rapperswil

Partial 3

P0646R1

LWG

Improving the Return Value of Erase-Like Algorithms

Rapperswil

Complete

10.0

P0722R3

CWG

Efficient sized delete for variable sized classes

Rapperswil

Complete

9.0

P0758R1

LWG

Implicit conversion traits and utility functions

Rapperswil

Complete

P0759R1

LWG

fpos Requirements

Rapperswil

Complete

11.0

P0769R2

LWG

Add shift to <algorithm>

Rapperswil

Complete

12.0

P0788R3

LWG

Standard Library Specification in a Concepts and Contracts World

Rapperswil

Removed in Cologne

n/a

P0879R0

LWG

Constexpr for swap and swap related functions Also resolves LWG issue 2800.

Rapperswil

Complete

13.0

P0887R1

LWG

The identity metafunction

Rapperswil

Complete

8.0

P0892R2

CWG

explicit(bool)

Rapperswil

P0898R3

LWG

Standard Library Concepts

Rapperswil

Complete

13.0

P0935R0

LWG

Eradicating unnecessarily explicit default constructors from the standard library

Rapperswil

Complete

12.0

P0941R2

CWG

Integrating feature-test macros into the C++ WD

Rapperswil

In Progress

P1023R0

LWG

constexpr comparison operators for std::array

Rapperswil

Complete

8.0

P1025R1

CWG

Update The Reference To The Unicode Standard

Rapperswil

P1120R0

CWG

Consistency improvements for <=> and other comparison operators

Rapperswil

P0318R1

LWG

unwrap_ref_decay and unwrap_reference

San Diego

Complete

8.0

P0356R5

LWG

Simplified partial function application

San Diego

Complete

13.0

P0357R3

LWG

reference_wrapper for incomplete types

San Diego

Complete

8.0

P0482R6

CWG

char8_t: A type for UTF-8 characters and strings

San Diego

In Progress

P0487R1

LWG

Fixing operator>>(basic_istream&, CharT*) (LWG 2499)

San Diego

Complete

8.0

P0591R4

LWG

Utility functions to implement uses-allocator construction

San Diego

P0595R2

CWG

P0595R2 std::is_constant_evaluated()

San Diego

Complete

9.0

P0602R4

LWG

variant and optional should propagate copy/move triviality

San Diego

Complete

8.0

P0608R3

LWG

A sane variant converting constructor

San Diego

Complete

9.0

P0655R1

LWG

visit<R>: Explicit Return Type for visit

San Diego

Complete

12.0

P0771R1

LWG

std::function move constructor should be noexcept

San Diego

Complete

6.0

P0896R4

LWG

The One Ranges Proposal

San Diego

In Progress

P0899R1

LWG

P0899R1 - LWG 3016 is not a defect

San Diego

Nothing To Do

P0919R3

LWG

Heterogeneous lookup for unordered containers

San Diego

Complete

12.0

P0972R0

LWG

<chrono> zero(), min(), and max() should be noexcept

San Diego

Complete

8.0

P1006R1

LWG

Constexpr in std::pointer_traits

San Diego

Complete

8.0

P1007R3

LWG

std::assume_aligned

San Diego

P1020R1

LWG

Smart pointer creation with default initialization

San Diego

P1032R1

LWG

Misc constexpr bits

San Diego

Complete

13.0

P1085R2

LWG

Should Span be Regular?

San Diego

Complete

8.0

P1123R0

LWG

Editorial Guidance for merging P0019r8 and P0528r3

San Diego

P1148R0

LWG

Cleaning up Clause 20

San Diego

P1165R1

LWG

Make stateful allocator propagation more consistent for operator+(basic_string)

San Diego

P1209R0

LWG

Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20

San Diego

Complete

8.0

P1210R0

LWG

Completing the Rebase of Library Fundamentals, Version 3, Working Draft

San Diego

P1236R1

CWG

Alternative Wording for P0907R4 Signed Integers are Two’s Complement

San Diego

P1248R1

LWG

Remove CommonReference requirement from StrictWeakOrdering (a.k.a Fixing Relations)

San Diego

Complete

13.0

P1285R0

LWG

Improving Completeness Requirements for Type Traits

San Diego

P1353R0

CWG

Missing feature test macros

San Diego

P0339R6

LWG

polymorphic_allocator<> as a vocabulary type

Kona

P0340R3

LWG

Making std::underlying_type SFINAE-friendly

Kona

Complete

9.0

P0738R2

LWG

I Stream, You Stream, We All Stream for istream_iterator

Kona

P0811R3

LWG

Well-behaved interpolation for numbers and pointers

Kona

Complete

9.0

P0920R2

LWG

Precalculated hash values in lookup

Kona

Reverted by P1661

P1001R2

LWG

Target Vectorization Policies from Parallelism V2 TS to C++20

Kona

P1024R3

LWG

Usability Enhancements for std::span

Kona

Complete

9.0

P1164R1

LWG

Make create_directory() Intuitive

Kona

Complete

12.0

P1227R2

LWG

Signed ssize() functions, unsigned size() functions

Kona

Complete

9.0

P1252R2

LWG

Ranges Design Cleanup

Kona

P1286R2

CWG

Contra CWG DR1778

Kona

P1357R1

LWG

Traits for [Un]bounded Arrays

Kona

Complete

9.0

P1458R1

LWG

Mandating the Standard Library: Clause 16 - Language support library

Kona

Complete

9.0

P1459R1

LWG

Mandating the Standard Library: Clause 18 - Diagnostics library

Kona

Complete

9.0

P1462R1

LWG

Mandating the Standard Library: Clause 20 - Strings library

Kona

Complete

9.0

P1463R1

LWG

Mandating the Standard Library: Clause 21 - Containers library

Kona

P1464R1

LWG

Mandating the Standard Library: Clause 22 - Iterators library

Kona

Complete

9.0

P0325

LWG

to_array from LFTS with updates

Cologne

Complete

10.0

P0408

LWG

Efficient Access to basic_stringbuf’s Buffer

Cologne

P0466

LWG

Layout-compatibility and Pointer-interconvertibility Traits

Cologne

P0553

LWG

Bit operations

Cologne

Complete

9.0

P0631

LWG

Math Constants

Cologne

Complete

11.0

P0645

LWG

Text Formatting

Cologne

In Progress

P0660

LWG

Stop Token and Joining Thread, Rev 10

Cologne

P0784

CWG

More constexpr containers

Cologne

Complete

12.0

P0980

LWG

Making std::string constexpr

Cologne

P1004

LWG

Making std::vector constexpr

Cologne

P1035

LWG

Input Range Adaptors

Cologne

P1065

LWG

Constexpr INVOKE

Cologne

Complete

12.0

P1135

LWG

The C++20 Synchronization Library

Cologne

Complete

11.0

P1207

LWG

Movability of Single-pass Iterators

Cologne

P1208

LWG

Adopt source_location for C++20

Cologne

P1355

LWG

Exposing a narrow contract for ceil2

Cologne

Complete

9.0

P1361

LWG

Integration of chrono with text formatting

Cologne

P1423

LWG

char8_t backward compatibility remediation

Cologne

In Progress

P1424

LWG

‘constexpr’ feature macro concerns

Cologne

Superseded by P1902

P1466

LWG

Miscellaneous minor fixes for chrono

Cologne

P1474

LWG

Helpful pointers for ContiguousIterator

Cologne

P1502

LWG

Standard library header units for C++20

Cologne

P1522

LWG

Iterator Difference Type and Integer Overflow

Cologne

P1523

LWG

Views and Size Types

Cologne

P1612

LWG

Relocate Endian’s Specification

Cologne

Complete

10.0

P1614

LWG

The Mothership has Landed

Cologne

In Progress

P1638

LWG

basic_istream_view::iterator should not be copyable

Cologne

P1643

LWG

Add wait/notify to atomic_ref

Cologne

P1644

LWG

Add wait/notify to atomic<shared_ptr>

Cologne

P1650

LWG

Output std::chrono::days with ‘d’ suffix

Cologne

P1651

LWG

bind_front should not unwrap reference_wrapper

Cologne

Complete

13.0

P1652

LWG

Printf corner cases in std::format

Cologne

P1661

LWG

Remove dedicated precalculated hash lookup interface

Cologne

Nothing To Do

P1754

LWG

Rename concepts to standard_case for C++20, while we still can

Cologne

In Progress

P0883

LWG

Fixing Atomic Initialization

Belfast

Complete 4

13.0

P1391

LWG

Range constructor for std::string_view

Belfast

P1394

LWG

Range constructor for std::span

Belfast

P1456

LWG

Move-only views

Belfast

P1622

LWG

Mandating the Standard Library: Clause 32 - Thread support library

Belfast

P1645

LWG

constexpr for numeric algorithms

Belfast

Complete

12.0

P1664

LWG

reconstructible_range - a concept for putting ranges back together

Belfast

P1686

LWG

Mandating the Standard Library: Clause 27 - Time library

Belfast

P1690

LWG

Refinement Proposal for P0919 Heterogeneous lookup for unordered containers

Belfast

Complete

12.0

P1716

LWG

ranges compare algorithm are over-constrained

Belfast

P1718

LWG

Mandating the Standard Library: Clause 25 - Algorithms library

Belfast

P1719

LWG

Mandating the Standard Library: Clause 26 - Numerics library

Belfast

P1720

LWG

Mandating the Standard Library: Clause 28 - Localization library

Belfast

P1721

LWG

Mandating the Standard Library: Clause 29 - Input/Output library

Belfast

P1722

LWG

Mandating the Standard Library: Clause 30 - Regular Expression library

Belfast

P1723

LWG

Mandating the Standard Library: Clause 31 - Atomics library

Belfast

P1855

LWG

Make <compare> freestanding

Belfast

P1862

LWG

Ranges adaptors for non-copyable iterators

Belfast

P1865

LWG

Add max() to latch and barrier

Belfast

Complete

11.0

P1869

LWG

Rename ‘condition_variable_any’ interruptible wait methods

Belfast

P1870

LWG

forwarding-range is too subtle

Belfast

In Progress

P1871

LWG

Should concepts be enabled or disabled?

Belfast

P1872

LWG

span should have size_type, not index_type

Belfast

Complete

10.0

P1878

LWG

Constraining Readable Types

Belfast

P1892

LWG

Extended locale-specific presentation specifiers for std::format

Belfast

P1902

LWG

Missing feature-test macros 2018-2019

Belfast

P1959

LWG

Remove std::weak_equality and std::strong_equality

Belfast

P1960

LWG

NB Comment Changes Reviewed by SG1

Belfast

P1961

LWG

Harmonizing the definitions of total order for pointers

Belfast

P1965

LWG

Blanket Wording for Specifying “Hidden Friends”

Belfast

P0586

LWG

Safe integral comparisons

Prague

Complete

13.0

P0593

CWG

Implicit creation of objects for low-level object manipulation

Prague

P1115

LWG

Improving the Return Value of Erase-Like Algorithms II: Free erase/erase if

Prague

Complete

11.0

P1243

LWG

Rangify New Algorithms

Prague

P1460

LWG

Mandating the Standard Library: Clause 20 - Utilities library

Prague

P1739

LWG

Avoid template bloat for safe_ranges in combination with “subrange-y” view adaptors

Prague

P1831

LWG

Deprecating volatile: library

Prague

P1868

LWG

width: clarifying units of width and precision in std::format

Prague

P1908

CWG

Reserving Attribute Namespaces for Future Use

Prague

P1937

CWG

Fixing inconsistencies between constexpr and consteval functions

Prague

P1956

LWG

On the names of low-level bit manipulation functions

Prague

Complete

12.0

P1957

CWG

Converting from T* to bool should be considered narrowing (re: US 212)

Prague

P1963

LWG

Fixing US 313

Prague

P1964

LWG

Wording for boolean-testable

Prague

Complete

13.0

P1970

LWG

Consistency for size() functions: Add ranges::ssize

Prague

P1973

LWG

Rename “_default_init” Functions, Rev1

Prague

P1976

LWG

Fixed-size span construction from dynamic range

Prague

Complete

11.0

P1981

LWG

Rename leap to leap_second

Prague

P1982

LWG

Rename link to time_zone_link

Prague

P1983

LWG

Wording for GB301, US296, US292, US291, and US283

Prague

P1994

LWG

elements_view needs its own sentinel

Prague

P2002

CWG

Defaulted comparison specification cleanups

Prague

P2045

LWG

Missing Mandates for the standard library

Prague

P2085

CWG

Consistent defaulted comparisons

Prague

P2091

LWG

Issues with range access CPOs

Prague

P2101

LWG

‘Models’ subsumes ‘satisfies’ (Wording for US298 and US300)

Prague

P2102

LWG

Make ‘implicit expression variations’ more explicit (Wording for US185)

Prague

P2106

LWG

Alternative wording for GB315 and GB316

Prague

P2116

LWG

Remove tuple-like protocol support from fixed-extent span

Prague

Complete

11.0

P2231

LWG

Missing constexpr in std::optional and std::variant

February 2021

In Progress

13.0

P2325

LWG

Views should not be required to be default constructible

June 2021

In Progress

P2210R2

LWG

Superior String Splitting

June 2021

P2216R3

LWG

std::format improvements

June 2021

P2281R1

LWG

Clarifying range adaptor objects

June 2021

P2328R1

LWG

join_view should join all views of ranges

June 2021

P2367R0

LWG

Remove misuses of list-initialization from Clause 24

June 2021

Note

1

P0600: The missing bits in P0600 are in §[mem.res.class], §[mem.poly.allocator.class], and §[container.node.overview].

2

P0966: It was previously erroneously marked as complete in version 8.0. See bug 45368.

3

P0619: Only sections D.8, D.9, D.10 and D.13 are implemented. Sections D.4, D.7, D.11, D.12, and D.14 remain undone.

4

P0883: shared_ptr and floating-point changes weren’t applied as they themselves aren’t implemented yet.

Library Working Group Issues Status

Issue #

Issue Name

Meeting

Status

First released version

2070

allocate_shared should use allocator_traits<A>::construct

Toronto

Resolved by P0674R1

2444

Inconsistent complexity for std::sort_heap

Toronto

2593

Moved-from state of Allocators

Toronto

2597

std::log misspecified for complex numbers

Toronto

2783

stack::emplace() and queue::emplace() should return decltype(auto)

Toronto

Complete

2932

Constraints on parallel algorithm implementations are underspecified

Toronto

2937

Is equivalent("existing_thing", "not_existing_thing") an error

Toronto

Complete

2940

result_of specification also needs a little cleanup

Toronto

2942

LWG 2873’s resolution missed weak_ptr::owner_before

Toronto

Complete

2954

Specialization of the convenience variable templates should be prohibited

Toronto

Complete

2961

Bad postcondition for set_default_resource

Toronto

2966

Incomplete resolution of US 74

Toronto

Nothing To Do

2974

Diagnose out of bounds tuple_element/variant_alternative

Toronto

Complete

2779

[networking.ts] Relax requirements on buffer sequence iterators

Albuquerque

2870

Default value of parameter theta of polar should be dependent

Albuquerque

Complete

2935

What should create_directories do when p already exists but is not a directory?

Albuquerque

Nothing To Do

2941

[thread.req.timing] wording should apply to both member and namespace-level functions

Albuquerque

Nothing To Do

2944

LWG 2905 accidentally removed requirement that construction of the deleter doesn’t throw an exception

Albuquerque

Nothing To Do

2945

Order of template parameters in optional comparisons

Albuquerque

Complete

2948

unique_ptr does not define operator<< for stream output

Albuquerque

Complete

2950

std::byte operations are misspecified

Albuquerque

Complete

2952

iterator_traits should work for pointers to cv T

Albuquerque

Complete

2953

LWG 2853 should apply to deque::erase too

Albuquerque

Complete

2958

Moves improperly defined as deleted

Albuquerque

We already do this

2964

Apparently redundant requirement for dynamic_pointer_cast

Albuquerque

2965

Non-existing path::native_string() in filesystem_error::what() specification

Albuquerque

Nothing To Do

2972

What is is_trivially_destructible_v<int>?

Albuquerque

Complete

2976

Dangling uses_allocator specialization for packaged_task

Albuquerque

Complete

2977

unordered_meow::merge() has incorrect Throws: clause

Albuquerque

Nothing To Do

2978

Hash support for pmr::string and friends

Albuquerque

2979

aligned_union should require complete object types

Albuquerque

Complete

2980

Cannot compare_exchange empty pointers

Albuquerque

2981

Remove redundant deduction guides from standard library

Albuquerque

2982

Making size_type consistent in associative container deduction guides

Albuquerque

2988

Clause 32 cleanup missed one typename

Albuquerque

2993

reference_wrapper<T> conversion from T&&

Albuquerque

Complete

13.0

2998

Requirements on function objects passed to {forward_,}list-specific algorithms

Albuquerque

Nothing To Do

3001

weak_ptr::element_type needs remove_extent_t

Albuquerque

3024

variant’s copies must be deleted instead of disabled via SFINAE

Albuquerque

Complete

2164

What are the semantics of vector.emplace(vector.begin(), vector.back())?

Jacksonville

Complete

2243

istream::putback problem

Jacksonville

Complete

2816

resize_file has impossible postcondition

Jacksonville

Nothing To Do

2843

Unclear behavior of std::pmr::memory_resource::do_allocate()

Jacksonville

Complete

2849

Why does !is_regular_file(from) cause copy_file to report a “file already exists” error?

Jacksonville

Nothing To Do

2851

std::filesystem enum classes are now underspecified

Jacksonville

Nothing To Do

2946

LWG 2758’s resolution missed further corrections

Jacksonville

Complete

2969

polymorphic_allocator::construct() shouldn’t pass resource()

Jacksonville

Complete

2975

Missing case for pair construction in scoped and polymorphic allocators

Jacksonville

2989

path’s stream insertion operator lets you insert everything under the sun

Jacksonville

Complete

3000

monotonic_memory_resource::do_is_equal uses dynamic_cast unnecessarily

Jacksonville

3002

[networking.ts] basic_socket_acceptor::is_open() isn’t noexcept

Jacksonville

3004

§[string.capacity] and §[vector.capacity] should specify time complexity for capacity()

Jacksonville

Nothing To Do

3005

Destruction order of arrays by make_shared/allocate_shared only recommended?

Jacksonville

3007

allocate_shared should rebind allocator to cv-unqualified value_type for construction

Jacksonville

3009

Including <string_view> doesn’t provide std::size/empty/data

Jacksonville

Complete

3010

[networking.ts] uses_executor says “if a type T::executor_type exists”

Jacksonville

3013

(recursive_)directory_iterator construction and traversal should not be noexcept

Jacksonville

Complete

3014

More noexcept issues with filesystem operations

Jacksonville

Complete

3015

copy_options::*unspecified* underspecified

Jacksonville

Nothing To Do

3017

list splice functions should use addressof

Jacksonville

Complete

3020

[networking.ts] Remove spurious nested value_type buffer sequence requirement

Jacksonville

3026

filesystem::weakly_canonical still defined in terms of canonical(p, base)

Jacksonville

Complete

3030

Who shall meet the requirements of try_lock?

Jacksonville

Nothing To Do

3034

P0767R1 breaks previously-standard-layout types

Jacksonville

Complete

3035

std::allocator’s constructors should be constexpr

Jacksonville

Complete

3039

Unnecessary decay in thread and packaged_task

Jacksonville

Complete

3041

Unnecessary decay in reference_wrapper

Jacksonville

Complete

3042

is_literal_type_v should be inline

Jacksonville

Complete

3043

Bogus postcondition for filesystem_error constructor

Jacksonville

Complete

3045

atomic<*floating-point*> doesn’t have value_type or difference_type

Jacksonville

3048

transform_reduce(exec, first1, last1, first2, init) discards execution policy

Jacksonville

3051

Floating point classifications were inadvertently changed in P0175

Jacksonville

Nothing To Do

3075

basic_string needs deduction guides from basic_string_view

Jacksonville

Complete

2139

What is a user-defined type?

Rapperswil

2970

Return type of std::visit misspecified

Rapperswil

3058

Parallel adjacent_difference shouldn’t require creating temporaries

Rapperswil

3062

Unnecessary decay_t in is_execution_policy_v should be remove_cvref_t

Rapperswil

3067

recursive_directory_iterator::pop must invalidate

Rapperswil

Nothing To Do

3071

[networking.ts] read_until still refers to “input sequence”

Rapperswil

Nothing To Do

3074

Non-member functions for valarray should only deduce from the valarray

Rapperswil

3076

basic_string CTAD ambiguity

Rapperswil

Complete

3079

LWG 2935 forgot to fix the existing_p overloads of create_directory

Rapperswil

Nothing To Do

3080

Floating point from_chars pattern specification breaks round-tripping

Rapperswil

3083

What should ios::iword(-1) do?

Rapperswil

Nothing To Do

3094

[time.duration.io]p4 makes surprising claims about encoding

Rapperswil

3100

Unnecessary and confusing “empty span” wording

Rapperswil

Nothing To Do

3102

Clarify span iterator and const_iterator behavior

Rapperswil

Complete

3104

Fixing duration division

Rapperswil

Complete

2183

Muddled allocator requirements for match_results constructors

San Diego

Complete

2184

Muddled allocator requirements for match_results assignments

San Diego

Complete

2412

promise::set_value() and promise::get_future() should not race

San Diego

2499

operator>>(basic_istream&, CharT*) makes it hard to avoid buffer overflows

San Diego

Resolved by P0487R1

2682

filesystem::copy() won’t create a symlink to a directory

San Diego

Nothing To Do

2697

[concurr.ts] Behavior of future/shared_future unwrapping constructor when given an invalid future

San Diego

2797

Trait precondition violations

San Diego

Resolved by 1285R0

2936

Path comparison is defined in terms of the generic format

San Diego

Complete

2943

Problematic specification of the wide version of basic_filebuf::open

San Diego

Nothing To Do

2960

[fund.ts.v3] nonesuch is insufficiently useless

San Diego

Complete

2995

basic_stringbuf default constructor forbids it from using SSO capacity

San Diego

2996

Missing rvalue overloads for shared_ptr operations

San Diego

3008

make_shared (sub)object destruction semantics are not specified

San Diego

3022

is_convertible<derived*, base*> may lead to ODR

San Diego

Resolved by 1285R0

3025

Map-like container deduction guides should use pair<Key, T>, not pair<const Key, T>

San Diego

Complete

3031

Algorithms and predicates with non-const reference arguments

San Diego

3037

polymorphic_allocator and incomplete types

San Diego

3038

polymorphic_allocator::allocate should not allow integer overflow to create vulnerabilities

San Diego

3054

uninitialized_copy appears to not be able to meet its exception-safety guarantee

San Diego

3065

LWG 2989 missed that all path’s other operators should be hidden friends as well

San Diego

Complete

3096

path::lexically_relative is confused by trailing slashes

San Diego

Complete

3116

*OUTERMOST_ALLOC_TRAITS* needs remove_reference_t

San Diego

3122

__cpp_lib_chrono_udls was accidentally dropped

San Diego

Complete

3127

basic_osyncstream::rdbuf needs a ``const_cast``

San Diego

3128

strstream::rdbuf needs a ``const_cast``

San Diego

Nothing To Do

3129

regex_token_iterator constructor uses wrong pointer arithmetic

San Diego

3130

§[input.output] needs many addressof

San Diego

3131

addressof all the things

San Diego

3132

Library needs to ban macros named expects or ensures

San Diego

Nothing To Do

3134

[fund.ts.v3] LFTSv3 contains extraneous [meta] variable templates that should have been deleted by P09961

San Diego

Resolved by P1210R0

3137

Header for __cpp_lib_to_chars

San Diego

Complete

3145

file_clock breaks ABI for C++17 implementations

San Diego

Complete

3147

Definitions of “likely” and “unlikely” are likely to cause problems

San Diego

3148

<concepts> should be freestanding

San Diego

3153

Common and common_type have too little in common

San Diego

3154

Common and CommonReference have a common defect

San Diego

3012

atomic<T> is unimplementable for non-is_trivially_copy_constructible T

Kona

3040

basic_string_view::starts_with Effects are incorrect

Kona

Complete

3077

(push|emplace)_back should invalidate the end iterator

Kona

Nothing To Do

3087

One final &x in §[list.ops]

Kona

Nothing To Do

3101

span’s Container constructors need another constraint

Kona

Complete

3112

system_error and filesystem_error constructors taking a string may not be able to meet their postconditions

Kona

3119

Program-definedness of closure types

Kona

Nothing To Do

3133

Modernizing numeric type requirements

Kona

3144

span does not have a ``const_pointer`` typedef

Kona

Complete

3173

Enable CTAD for ``ref-view``

Kona

3179

subrange should always model Range

Kona

3180

Inconsistently named return type for ranges::minmax_element

Kona

3182

Specification of Same could be clearer

Kona

2899

is_(nothrow_)move_constructible and tuple, optional and unique_ptr

Cologne

3055

path::operator+=(*single-character*) misspecified

Cologne

Complete

7.0

3158

tuple(allocator_arg_t, const Alloc&) should be conditionally explicit

Cologne

3169

ranges permutation generators discard useful information

Cologne

3183

Normative permission to specialize Ranges variable templates

Cologne

3184

Inconsistencies in bind_front wording

Cologne

Complete

13.0

3185

Uses-allocator construction functions missing constexpr and noexcept

Cologne

3186

ranges removal, partition, and partial_sort_copy algorithms discard useful information

Cologne

3187

P0591R4 reverted DR 2586 fixes to scoped_allocator_adaptor::construct()

Cologne

3191

std::ranges::shuffle synopsis does not match algorithm definition

Cologne

3196

std::optional<T> is ill-formed is T is an array

Cologne

Complete

3198

Bad constraint on std::span::span()

Cologne

Complete

3199

istream >> bitset<0> fails

Cologne

3202

P0318R1 was supposed to be revised

Cologne

Complete

3206

year_month_day conversion to sys_days uses not-existing member function

Cologne

Complete

3208

Boolean’s expression requirements are ordered inconsistently

Cologne

Nothing To Do

3209

Expression in year::ok() returns clause is ill-formed

Cologne

Complete

3231

year_month_day_last::day specification does not cover !ok() values

Belfast

Nothing To Do

3225

zoned_time converting constructor shall not be noexcept

Belfast

3190

std::allocator::allocate sometimes returns too little storage

Belfast

3218

Modifier for %d parse flag does not match POSIX and format specification

Belfast

3224

zoned_time constructor from TimeZonePtr does not specify initialization of tp_

Belfast

3230

Format specifier %y/%Y is missing locale alternative versions

Belfast

3232

Inconsistency in zoned_time deduction guides

Belfast

3222

P0574R1 introduced preconditions on non-existent parameters

Belfast

3221

Result of year_month arithmetic with months is ambiguous

Belfast

Complete

8.0

3235

parse manipulator without abbreviation is not callable

Belfast

3246

What are the constraints on the template parameter of basic_format_arg?

Belfast

3253

basic_syncbuf::basic_syncbuf() should not be explicit

Belfast

3245

Unnecessary restriction on '%p' parse specifier

Belfast

3244

Constraints for Source in §[fs.path.req] insufficiently constrainty

Belfast

3241

chrono-spec grammar ambiguity in §[time.format]

Belfast

3257

Missing feature testing macro update from P0858

Belfast

3256

Feature testing macro for constexpr algorithms

Belfast

Complete

13.0

3273

Specify weekday_indexed to range of [0, 7]

Belfast

3070

path::lexically_relative causes surprising results if a filename can also be a root-name

Belfast

3266

to_chars(bool) should be deleted

Belfast

3272

%I%p should parse/format duration since midnight

Belfast

3259

The definition of constexpr iterators should be adjusted

Belfast

3103

Errors in taking subview of span should be ill-formed where possible

Belfast

3274

Missing feature test macro for <span>

Belfast

3276

Class split_view::outer_iterator::value_type should inherit from view_interface

Belfast

3277

Pre-increment on prvalues is not a requirement of weakly_incrementable

Belfast

3149

DefaultConstructible should require default initialization

Belfast

Complete

13.0

1203

More useful rvalue stream insertion

Prague

Complete

12.0

2859

Definition of reachable in [ptr.launder] misses pointer arithmetic from pointer-interconvertible object

Prague

3018

shared_ptr of function type

Prague

3050

Conversion specification problem in chrono::duration constructor

Prague

3141

CopyConstructible doesn’t preserve source values

Prague

Nothing To Do

3150

UniformRandomBitGenerator should validate min and max

Prague

Complete

13.0

3175

The CommonReference requirement of concept SwappableWith is not satisfied in the example

Prague

Complete

13.0

3194

ConvertibleTo prose does not match code

Prague

Complete

13.0

3200

midpoint should not constrain T is complete

Prague

Nothing To Do

3201

lerp should be marked as noexcept

Prague

Complete

3226

zoned_time constructor from string_view should accept zoned_time<Duration2, TimeZonePtr2>

Prague

3233

Broken requirements for shared_ptr converting constructors

Prague

3237

LWG 3038 and 3190 have inconsistent PRs

Prague

3238

Insufficiently-defined behavior of std::function deduction guides

Prague

3242

std::format: missing rules for arg-id in width and precision

Prague

3243

std::format and negative zeroes

Prague

3247

ranges::iter_move should perform ADL-only lookup of iter_move

Prague

3248

std::format #b, #B, #o, #x, and #X presentation types misformat negative numbers

Prague

3250

std::format: # (alternate form) for NaN and inf

Prague

3251

Are std::format alignment specifiers applied to string arguments?

Prague

3252

Parse locale’s aware modifiers for commands are not consistent with POSIX spec

Prague

3254

Strike stop_token’s operator!=

Prague

3255

span’s array constructor is too strict

Prague

Complete

3260

year_month* arithmetic rejects durations convertible to years

Prague

3262

Formatting of negative durations is not specified

Prague

3264

sized_range and ranges::size redundantly use disable_sized_range

Prague

3269

Parse manipulators do not specify the result of the extraction from stream

Prague

3270

Parsing and formatting %j with durations

Prague

3280

View converting constructors can cause constraint recursion and are unneeded

Prague

3281

Conversion from *pair-like* types to subrange is a silent semantic promotion

Prague

3282

subrange converting constructor should disallow derived to base conversions

Prague

3284

random_access_iterator semantic constraints accidentally promote difference type using unary negate

Prague

3285

The type of a customization point object shall satisfy semiregular

Prague

3286

ranges::size is not required to be valid after a call to ranges::begin on an input range

Prague

3291

iota_view::iterator has the wrong iterator_category

Prague

3292

iota_view is under-constrained

Prague

3294

zoned_time deduction guides misinterprets string/char*

Prague

3296

Inconsistent default argument for basic_regex<>::assign

Prague

Complete

3299

Pointers don’t need customized iterator behavior

Prague

3300

Non-array ssize overload is underconstrained

Prague

3301

transform_view::iterator has incorrect iterator_category

Prague

3302

Range adaptor objects keys and values are unspecified

Prague

3303

Bad “constexpr” marker for destroy/destroy_n

Prague

3304

Allocate functions of std::polymorphic_allocator should require [[nodiscard]]

Prague

3307

std::allocator<void>().allocate(n)

Prague

3310

Replace SIZE_MAX with numeric_limits<size_t>::max()

Prague

3313

join_view::iterator::operator-- is incorrectly constrained

Prague

3314

Is stream insertion behavior locale dependent when Period::type is micro?

Prague

3315

Correct Allocator Default Behavior

Prague

3316

Correctly define epoch for utc_clock / utc_timepoint

Prague

3317

Incorrect operator<< for floating-point durations

Prague

3318

Clarify whether clocks can represent time before their epoch

Prague

3319

Properly reference specification of IANA time zone database

Prague

3320

span::cbegin/cend methods produce different results than std::[ranges::]cbegin/cend

Prague

Complete

3321

uninitialized_construct_using_allocator should use construct_at

Prague

3323

*has-tuple-element* helper concept needs convertible_to

Prague

3324

Special-case std::strong/weak/partial_order for pointers

Prague

3325

Constrain return type of transformation function for transform_view

Prague

3326

enable_view has false positives

Prague

In Progress

3327

Format alignment specifiers vs. text direction

Prague

Nothing To Do

3328

Clarify that std::string is not good for UTF-8

Prague

3329

totally_ordered_with both directly and indirectly requires common_reference_with

Prague

Complete

13.0

3330

Include <compare> from most library headers

Prague

3331

Define totally_ordered/_with in terms of *partially-ordered-with*

Prague

Complete

13.0

3332

Issue in §[time.format]

Prague

3334

basic_osyncstream move assignment and destruction calls basic_syncbuf::emit() twice

Prague

3335

Resolve C++20 NB comments US 273 and GB 274

Prague

3338

Rename default_constructible to default_initializable

Prague

Complete

13.0

3340

Formatting functions should throw on argument/format string mismatch in §[format.functions]

Prague

3346

pair and tuple copy and move constructor have backwards specification

Prague

3347

std::pair<T, U> now requires T and U to be less-than-comparable

Prague

3348

__cpp_lib_unwrap_ref in wrong header

Prague

3349

Missing __cpp_lib_constexpr_complex for P0415R1

Prague

3350

Simplify return type of lexicographical_compare_three_way

Prague

3351

ranges::enable_safe_range should not be constrained

Prague

3352

strong_equality isn’t a thing

Prague

3354

has_strong_structural_equality has a meaningless definition

Prague

3355

The memory algorithms should support move-only input iterators introduced by P1207

Prague

3356

__cpp_lib_nothrow_convertible should be __cpp_lib_is_nothrow_convertible

Prague

3358

§[span.cons] is mistaken that to_address can throw

Prague

3359

<chrono> leap second support should allow for negative leap seconds

Prague

3360

three_way_comparable_with is inconsistent with similar concepts

Prague

3362

Strike stop_source’s operator!=

Prague

3363

drop_while_view should opt-out of sized_range

Prague

3364

Initialize data members of ranges and their iterators

Prague

3367

Integer-class conversions should not throw

Prague

3369

span’s deduction-guide for built-in arrays doesn’t work

Prague

3371

visit_format_arg and make_format_args are not hidden friends

Prague

3372

vformat_to should not try to deduce Out twice

Prague

3373

{to,from}_chars_result and format_to_n_result need the “we really mean what we say” wording

Prague

3374

P0653 + P1006 should have made the other std::to_address overload constexpr

Prague

Complete

12.0

3375

decay in viewable_range should be remove_cvref

Prague

3377

elements_view::iterator befriends a specialization of itself

Prague

3379

safe” in several library names is misleading

Prague

In Progress

3380

common_type and comparison categories

Prague

3381

begin and data must agree for contiguous_range

Prague

3382

NTTP for pair and array

Prague

3383

§[time.zone.leap.nonmembers] sys_seconds should be replaced with seconds

Prague

3384

transform_view::*sentinel* has an incorrect operator-

Prague

3385

common_iterator is not sufficiently constrained for non-copyable iterators

Prague

3387

§[range.reverse.view] reverse_view<V> unintentionally requires range<const V>

Prague

3388

view iterator types have ill-formed <=> operators

Prague

3389

A move-only iterator still does not have a counted_iterator

Prague

3390

make_move_iterator() cannot be used to construct a move_iterator for a move-only iterator

Prague

3393

Missing/incorrect feature test macro for coroutines

Prague

3395

Definition for three-way comparison needs to be updated (US 152)

Prague

3396

Clarify point of reference for source_location::current() (DE 169)

Prague

3397

ranges::basic_istream_view::iterator should not provide iterator_category

Prague

3398

tuple_element_t is also wrong for const subrange

Prague

3446

indirectly_readable_traitsambiguity for types with both value_typeand element_type

November virtual meeting

Complete

13.0

Last Updated: 24-May-2021