› P0260R19
C++ Concurrent Queues
Detlef Vollmann
D. Vollmann
,
Lawrence Crowl
L. Crowl
,
Chris Mysen
C. Mysen
,
Gor Nishanov
G. Nishanov
2025-06-18
2025-07
Doc Date
2025-06-18
Abstract
Concurrent queues are a fundamental structuring tool for concurrent programs. We propose concurrent queue concepts and a concrete implementation.
› P0870R7
A proposal for a type trait to detect narrowing conversions
Giuseppe D'Angelo
G. D'Angelo
2025-06-17
2025-07
› P0876R21
fiber_context - fibers without scheduler
Oliver Kowalke
O. Kowalke
,
Nat Goodspeed
N. Goodspeed
2025-07-13
2025-07
Doc Date
2025-07-13
Abstract
This paper proposes a minimal API that enables stackful context switching **without** the need for a scheduler. The API is suitable to act as building-block for high-level constructs such as stackful coroutines as well as cooperative multitasking (aka user-land/green threads that incorporate a **scheduling** facility).
› P2079R10
Parallel Scheduler
Lucian Radu Teodorescu
L. Teodorescu
,
Ruslan Arutyunyan
R. Arutyunyan
,
Lee Howes
L. Howes
,
Michael Voss
M. Voss
2025-06-25
2025-07
Doc Date
2025-06-25
Disposition Date
2025-06Adopted
Abstract
A standard execution context based on the facilities in [P2300R10] that implements parallel-forward-progress to maximize portability. A set of parallel schedulers have an underlying shared thread pool implementation, and may provide an interface to an OS-provided system thread pool.
› P2319R5
Prevent path presentation problems
Victor Zverovich
V. Zverovich
2025-06-17
2025-07
Doc Date
2025-06-17
Disposition Date
2025-06Adopted
Abstract
[P2845] made it possible to format and print `std::filesystem::path` with correct handling of Unicode. Unfortunately, some common path accessors still exhibit broken behavior, which results in mojibake and data loss. This paper proposes deprecating these accessors, making the path API more reliable and eliminating a common source of bugs.
› P2414R8
Pointer lifetime-end zap proposed solutions
Paul E. McKenney
P. McKenney
,
Maged Michael
M. Michael
,
Jens Maurer
J. Maurer
,
Peter Sewell
P. Sewell
,
Martin Uecker
M. Uecker
,
Hans Boehm
H. Boehm
,
Hubert Tong
H. Tong
,
Niall Douglas
N. Douglas
,
Thomas Rodgers
T. Rodgers
,
Will Deacon
W. Deacon
,
Michael Wong
M. Wong
,
David Goldblatt
D. Goldblatt
,
Kostya Serebryany
K. Serebryany
,
Anthony Williams
A. Williams
,
Tom Scogland
T. Scogland
,
JF Bastien
J. Bastien
2025-06-18
2025-07
Doc Date
2025-06-18
Author(s)
Paul E. McKenney , Maged Michael , Jens Maurer , Peter Sewell , Martin Uecker , Hans Boehm , Hubert Tong , Niall Douglas , Thomas Rodgers , Will Deacon , Michael Wong , David Goldblatt , Kostya Serebryany , Anthony Williams , Tom Scogland , JF Bastien
Abstract
**Introduction** **3** **Terminology** **4** **What We Are Asking For** **5** **Detailed Proposal** **6** A make_usable_ptr() Function 6 A usable_ptr<T> Template Class 6 Atomic Operations Forgive Pointer Invalidity 6 Volatile Accesses Forgive Pointer Invalidity 7 **Examples** **8** LIFO Push With Direct Pointer Access 8 Use Case 1: Invalid Pointer Use 8 Use Case 2: Zombie Pointer Dereference 9 Fix
› P2664R11
Proposal to extend std::simd with permutation API
Daniel Towner
D. Towner
,
Ruslan Arutyunyan
R. Arutyunyan
2025-06-20
2025-07
Doc Date
2025-06-20
Disposition Date
2025-06Adopted
Abstract
Proposal to extend `std::simd` with features enabling permutation of data within and across SIMD values.
› P2781R9
std::constexpr_wrapper
Zach Laine
Z. Laine
,
Matthias Kretz
M. Kretz
,
Hana Dusíková
H. Dusíková
2025-06-17
2025-07
Doc Date
2025-06-17
Disposition Date
2025-06Adopted
› P2876R3
Proposal to extend std::simd with more constructors and accessors
Daniel Towner
D. Towner
,
Matthias Kretz
M. Kretz
,
Ruslan Arutyunyan
R. Arutyunyan
2025-06-17
2025-07
Doc Date
2025-06-17
Disposition Date
2025-06Adopted
Abstract
Proposal to provide additional constructors and accessors for `std::simd_mask`
› P2996R13
Reflection for C++26
Barry Revzin
B. Revzin
,
Wyatt Childers
W. Childers
,
Peter Dimov
P. Dimov
,
Andrew Sutton
A. Sutton
,
Faisal Vali
F. Vali
,
Daveed Vandevoorde
D. Vandevoorde
,
Dan Katz
D. Katz
2025-06-20
2025-07
Doc Date
2025-06-20
Disposition Date
2025-06Adopted
Abstract
This is a proposal for a reduced initial set of features to support static reflection in C++. Specifically, we are mostly proposing a subset of features suggested in [[P1240R2]](https://wg21.link/p1240r2):
› P3008R6
Atomic floating-point min/max
Gonzalo Brito Gadeschi
G. Gadeschi
,
David Sankel
D. Sankel
2025-06-19
2025-07
Doc Date
2025-06-19
Disposition Date
2025-06Adopted
Abstract
[P0493R4](https://wg21.link/P0493R4) *Atomic minimum/maximum* proposes the addition of `atomic<T>::fetch_min` and `atomic<T>::fetch_max` operations, which atomically perform `std::min` and `std::max` computations.
› P3044R2
sub-string_view from string
Michael Florian Hava
M. Hava
2025-06-19
2025-07
Doc Date
2025-06-19
Disposition Date
2025-06Adopted
Abstract
This paper proposes a way to retrieve a sub-`string_view` from a `string` directly.
› P3060R3
Add std::views::indices(n)
Weile Wei
W. Wei
,
Zhihao Yuan
Z. Yuan
2025-06-19
2025-07
Doc Date
2025-06-19
Disposition Date
2025-06Adopted
Abstract
We propose adding `std::views::indices(n)` to the C++ Standard Library as a range adaptor that generates a sequence of integers from `0` to `n-1`.
› P3091R4
Better lookups for `map` , `unordered_map`, and `flat_map`
Pablo Halpern
P. Halpern
2025-06-20
2025-07
Doc Date
2025-06-20
Abstract
The most convenient way to look up an element of a `map`-like container is to use the index operator, i.e., `theMap[key]`. This operator cannot be used, however, when 1) the container is `const`, 2) the mapped type is not default constructible, 3) the default-constructed value is inappropriate for the context, or 4) the container should not be modified. These limitations often force the user to re
› P3096R12
Function Parameter Reflection in Reflection for C++26
Adam Lach
A. Lach
,
Walter Genovese
W. Genovese
2025-06-20
2025-07
Doc Date
2025-06-20
Disposition Date
2025-06Adopted
Abstract
Based on a few demonstrative applications, we claim that parameter reflection is an important feature that should be included in the initial specification for Reflection in C++26.
› P3104R4
Bit permutations
Jan Schultke
J. Schultke
2025-06-28
2025-07
Doc Date
2025-06-28
Abstract
Add bit permutation functions to the bit manipulation library.
› P3111R8
Atomic Reduction Operations
Gonzalo Brito Gadeschi
G. Gadeschi
,
Simon Cooksey
S. Cooksey
,
Daniel Lustig
D. Lustig
2025-06-19
2025-07
Doc Date
2025-06-19
Disposition Date
2025-06Adopted
Abstract
Concurrent algorithms performing atomic RMW operations that discard the old fetched value are very common in high-performance computing, e.g., finite-element matrix assembly, data analytics (e.g. building histograms), etc.
› P3149R11
async_scope -- Creating scopes for non-sequential concurrency
Ian Petersen
I. Petersen
,
Jessica Wong; Dietmar Kühl; Ján Ondrušek; Kirk Shoop; Lee Howes; Lucian Radu Teodorescu; Ruslan Arutyunyan;
J. Arutyunyan;
2025-06-19
2025-07
Doc Date
2025-06-19
Disposition Date
2025-06Adopted
Abstract
[P2300R10] lays the groundwork for writing structured concurrent programs in C++ but it leaves three important scenarios under- or unaddressed:
› P3179R9
C++ parallel range algorithms
Ruslan Arutyunyan
R. Arutyunyan
,
Alexey Kukanov
A. Kukanov
,
Bryce Adelstein Lelbach
B. Lelbach
2025-05-29
2025-07
Doc Date
2025-05-29
Disposition Date
2025-06Adopted
Abstract
This paper proposes adding parallel algorithms that work together with the C++ Ranges library.
› P3211R1
views::flat_map
Hewill Kang
H. Kang
2025-07-04
2025-07
Doc Date
2025-07-04
Abstract
We propose `views::flat_map`, a range adaptor that applies a function returning a range for each element, then flattens the result. This pattern, commonly known as *flat mapping*, is widespread in functional programming and data processing. Providing it as a dedicated view improves readability and expressiveness, and also opens opportunities for optimization in lazy evaluation contexts.
› P3216R1
views::slice
Hewill Kang
H. Kang
2025-06-29
2025-07
Doc Date
2025-06-29
Abstract
This paper proposes the Tier 1 adaptor `views::slice` (as described in [P2760](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2760r1.html)) to enhance the C++29 ranges library. Notably, this is the first standard range adaptor that accepts two arguments — `start` and `end` — to specify the interval [`start`, `end`) for slicing a range.
› P3220R1
views::take_before
Hewill Kang
H. Kang
2025-06-23
2025-07
Doc Date
2025-06-23
Abstract
This paper proposes the Tier 1 adaptor in [P2760](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2760r1.html): `views::delimit`, which is renamed into `views::take_before` along with its corresponding view class to improve the C++29 ranges facilities.
› P3223R2
Making std::istream::ignore less surprising
Jonathan Wakely
J. Wakely
2025-06-20
2025-07
Doc Date
2025-06-20
Disposition Date
2025-06Adopted
Abstract
`std::istream::ignore(n, delim)` has surprising behaviour if `delim` is a `char` with a negative value. We can remove the surprise and make code more robust.
› P3248R4
Require [u]intptr_t
Gonzalo Brito Gadeschi
G. Gadeschi
2025-06-19
2025-07
Doc Date
2025-06-19
Abstract
Proposals like [P2835](https://wg21.link/p2835) and [P3125](https://wg21.link/P3125) use `[u]intptr_t` as an integer type capable of holding a pointer value in their APIs<sup>[1]</sup>. However, `[u]intptr_t` being *optional* forces sub-optimal design choices such as making APIs optional or introducing workarounds.
› P3293R3
Splicing a base class subobject
Barry Revzin
B. Revzin
,
Peter Dimov
P. Dimov
,
Dan Katz
D. Katz
,
Daveed Vandevoorde
D. Vandevoorde
2025-06-20
2025-07
Doc Date
2025-06-20
Disposition Date
2025-06Adopted
Abstract
There are many contexts in which it is useful to perform the same operation on each subobject of an object in sequence. These include serialization or [formatting](https://www.boost.org/doc/libs/1_85_0/libs/describe/doc/html/describe.html#example_print_function) or [hashing](https://www.boost.org/doc/libs/1_85_0/libs/describe/doc/html/describe.html#example_hash_value).
› P3348R4
C++26 should refer to C23 not C17
Jonathan Wakely
J. Wakely
2025-06-19
2025-07
Doc Date
2025-06-19
Disposition Date
2025-06Adopted
Abstract
There is a new version of the ISO C standard, so we should update our normative reference, and update the header synopses in the library clauses to match the content of the C standard library. A similar change to rebase C++17 on C11 was previously done via [P0063R3: C++17 should refer to C11 instead of C99](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0063r3.html) (see R0 for more det
› P3383R3
mdspan.at()
Stephan Lachnit
S. Lachnit
,
Xavier Bonaventura
X. Bonaventura
2025-06-17
2025-07
Doc Date
2025-06-17
Disposition Date
2025-06Adopted
Abstract
This paper proposes element access with bounds checking to `std::mdspan` via `at()` member functions.
› P3433R1
Allocator Support for Operation States
Dietmar Kuehl
D. Kuehl
2025-06-19
2025-07
Doc Date
2025-06-19
Disposition Date
2025-06Adopted
Abstract
Senders like `std``::``execution``::``just`, `std``::``execution``::``then`, and `std``::``execution``::``let_value` take some arguments which can be chosen fairly freely. Some of these arguments may be allocator-aware to offer control over their respective allocation needs. Carefully using allocators can allow, e.g., using standard container types without using global `operator` `new``()`/`operat
› P3480R6
std::simd is a range
Matthias Kretz
M. Kretz
2025-06-18
2025-07
Doc Date
2025-06-18
Disposition Date
2025-06Adopted
Abstract
P1928 “std::simd — merge data-parallel types from the Parallelism TS 2” promised a paper on making simd a range. This paper explores the addition of iterators to basic_simd and basic_simd_mask.
› P3481R5
std::execution::bulk() issues
Lucian Radu Teodorescu
L. Teodorescu
,
Ruslan Arutyunyan
R. Arutyunyan
,
Lewis Baker
L. Baker
,
Mark Hoemmen
M. Hoemmen
2025-06-18
2025-07
Doc Date
2025-06-18
Disposition Date
2025-06Adopted
Abstract
This paper explores the issues with `std::execution::bulk` algorithm and proposes a way to address them, making the API better for the users.
› P3491R3
define_static_{string,object,array}
Barry Revzin
B. Revzin
,
Wyatt Childers
W. Childers
,
Peter Dimov
P. Dimov
,
Daveed Vandevoorde
D. Vandevoorde
2025-06-20
2025-07
Doc Date
2025-06-20
Disposition Date
2025-06Adopted
Abstract
These functions were originally proposed as part of [[P2996R7] (Reflection for C++26)](https://wg21.link/p2996r7), but are being split off into their own paper.
› P3503R3
Make type-erased allocator use in promise and packaged_task consistent
Nicolas Morales
N. Morales
,
Jonathan Wakely
J. Wakely
2025-06-19
2025-07
Doc Date
2025-06-19
Disposition Date
2025-06Adopted
Abstract
[[LWG2095](https://wg21.link/lwg2095)] points out inconsistencies in the API of `std::promise`; namely that `uses_allocator<promise<R>, A>::value` is specified to be true in 32.10.6 [[futures.promise]](https://wg21.link/futures.promise), yet is missing the appropriate constructor taking an rvalue of promise.
› P3557R3
High-Quality Sender Diagnostics with Constexpr Exceptions
Eric Niebler
E. Niebler
2025-07-04
2025-07
Doc Date
2025-07-04
Disposition Date
2025-06Adopted
Abstract
The hardest part of writing a sender algorithm is often the computation of its completion signatures, an intricate meta-programming task. Using sender algorithms incorrectly leads to large, incomprehensible errors deep within the completion-signatures meta-program. What is needed is a way to propagate type errors automatically to the API boundary where they can be reported concisely, much the way
› P3560R2
Error Handling in Reflection
Barry Revzin
B. Revzin
,
Peter Dimov
P. Dimov
2025-06-20
2025-07
Doc Date
2025-06-20
Disposition Date
2025-06Adopted
Abstract
In [[P2996R12] (Reflection for C++26)](https://wg21.link/p2996r12), we had to answer the question of what the error handling mechanism should be. We considered four options:
› P3570R2
optional variants in sender/receiver
Fabio Fracassi
F. Fracassi
2025-06-18
2025-07
Doc Date
2025-06-18
Disposition Date
2025-06Adopted
Abstract
Some async interfaces for concurrent queues would be well served by using `std::optional` when used in a coroutine context. However when using sender/receiver interfaces directly the variant style visitor based on overloading has several benefits. This paper explores if and how we can get the best interface for each use case.
› P3663R2
Future-proof `submdspan-mapping`
Mark Hoemmen
M. Hoemmen
2025-07-13
2025-07
Doc Date
2025-07-13
Abstract
Currently, the `submdspan` function can call a `submdspan_mapping` customization with any valid slice type. This means that `submdspan_mapping` customizations may be ill-formed, possibly even without a diagnosic, if future C++ versions expand the set of valid slice types. This will happen if [P2769R3](https://wg21.link/p2769r3) is merged into the Working Draft for C++29, as that would generalize *
› P3687R1
Final Adjustments to C++26 Reflection
Dan Katz
D. Katz
,
Wyatt Childers
W. Childers
,
Daveed Vandevoorde
D. Vandevoorde
,
Ville Voutilainen
V. Voutilainen
2025-06-18
2025-07
Doc Date
2025-06-18
Abstract
We propose two minor design changes to [[P2996R12](https://wg21.link/p2996r12)] to ensure its readiness for C++26 and future-proof the evolution of the feature.
› P3690R1
Consistency fix: Make simd reductions SIMD-generic
Olaf Krzikalla
O. Krzikalla
,
Matthias Kretz
M. Kretz
2025-06-17
2025-07
Doc Date
2025-06-17
Abstract
One design goal of the `simd` interface is to enable SIMD-generic code. This is why all arithmetic operators and functions have corresponding overloads. However, arithmetic reductions are still missing overloads for non-`simd`, vectorizable types.
› P3691R1
Reconsider naming of the namespace for "std::simd"
Matthias Kretz
M. Kretz
,
Abhilash Majumder
A. Majumder
,
Bryce Adelstein Lelbach
B. Lelbach
,
Daniel Towner
D. Towner
,
Ilya Burylov
I. Burylov
,
Mark Hoemmen
M. Hoemmen
,
Ruslan Arutyunyan
R. Arutyunyan
2025-06-17
2025-07
Doc Date
2025-06-17
Disposition Date
2025-06Adopted
Abstract
There has been negative feedback on the names we chose for `std::datapar::basic_simd` and `std::datapar::basic_simd_mask`. The pushback is against the name of the namespace. This paper does *not reconsider the namespace* itself, it only reconsiders our naming options. Much of the discussion revolves around the question of whether it is acceptable to repeat a namespace name for an entity inside tha
› P3697R1
Minor additions to C++26 standard library hardening
Konstantin Varlamov
K. Varlamov
,
Louis Dionne
L. Dionne
,
Alisdair Meredith
A. Meredith
2025-06-20
2025-07
Doc Date
2025-06-20
Disposition Date
2025-06Adopted
Abstract
This paper is a small follow-up to P3471R4 “Standard Library Hardening” that hardens the preconditions of a few more library functions. All these functions satisfy the same criteria as the ones in the original paper:
› P3718R0
Fixing Lazy Sender Algorithm Customization, Again
Eric Niebler
E. Niebler
2025-06-28
2025-07
Doc Date
2025-06-28
Abstract
1. Add a non-forwarding `get_domain_override` query with no default implementation. 2. Give meaning to the `get_scheduler` query by requiring that an operation be started on an execution agent associated with the scheduler from the environment of the receiver used to create the operation. 3. Tweak the definitions of *`SCHED-ATTRS`* and *`SCHED-ENV`* to avoid forwaring the `get_domain` query. 4. Si
› P3725R1
Filter View Extensions for Input Ranges
Nicolai Josuttis
N. Josuttis
2025-06-23
2025-07
Doc Date
2025-06-23
Abstract
Using filter views is both risky and non-intuitive. Let us look at some typical use cases.
› P3739R1
Standard Library Hardening - using std::optional
Jarrad J Waterloo
J. Waterloo
2025-06-10
2025-07
Doc Date
2025-06-10
Abstract
Utilize `std::optional<T&>` <sup>[1]</sup> in `inplace_vector` <sup>[2]</sup> in order to harden it against null pointer dereference errors for similar memory safety reasons as `Standard Library Hardening` <sup>[3]</sup> and `Minor additions to C++26 standard library hardening` <sup>[4]</sup>.
› P3757R0
Remove value-type invocability requirement from indirect unary callable concepts
Hewill Kang
H. Kang
2025-06-22
2025-07
Doc Date
2025-06-22
Abstract
This is the follow up of [P2997](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2997r1.html).
› P3763R0
Remove redundant reserve_hint members from view classes
Hewill Kang
H. Kang
2025-06-21
2025-07
Doc Date
2025-06-21
Abstract
This paper removes the `reserve_hint` members of view classes when their `size` members are already provided.
› P3778R0
Fixing `type_order` template definition
Gašper Ažman
G. Ažman
2025-07-03
2025-07
Doc Date
2025-07-03
Disposition Date
2025-11Adopted
Abstract
The `type_order` template is unimplementable as specified by [[P2830R10]](https://wg21.link/p2830r10), due to values of type `strong_ordering` not being usable as template parameters because `strong_ordering` is not a structural type (it has a private member).
› P3785R0
Library Wording Changes for Defaulted Postfix Increment and Decrement Operators
Matthew Taylor
M. Taylor
,
Alex (Waffl3x)
A. (Waffl3x)
2025-07-13
2025-07
Doc Date
2025-07-13
Abstract
Following design-approval of P3668 Defaulting Postfix Increment and Decrement Operations, it would be possible to significantly shrink the standard library wording by defaulting those operations where appropriate. This paper proposes this as an editorial change for LWG review.
› P3787R0
Adjoints to "Enabling list-initialization for algorithms": uninitialized_fill
Giuseppe D'Angelo
G. D'Angelo
2025-07-10
2025-07
Doc Date
2025-07-10
Abstract
We extend the same changes that [P2248R8] applied to the rest of the find algorithms to `std(::ranges)::uninitialized_fill`.
› P3792R0
Why `constant_wrapper` is not a usable replacement for `nontype`
Bronek Kozicki
B. Kozicki
2025-07-13
2025-07
Doc Date
2025-07-13
Abstract
The lack of LEWG consensus during the Sofia meeting to replace `nontype` with `constant_wrapper` as a `function_ref` construction parameter has reportedly surprised some members of LWG. Plausibly, it might have also surprised the wider C++ community. This paper is an attempt to explain the process and the rationale behind the (lack of) decision for such a change.
› P3796R0
Coroutine Task Issues
Dietmar Kühl
D. Kühl
2025-07-15
2025-07
Doc Date
2025-07-15
Abstract
After the [task proposal](https://wg21.link/p3552) was voted to be forwarded to plenary for inclusion into C++26 a number of issues were brought up. The issues were reported using various means. This paper describes the issues and proposes potential changes to address them.
› P3798R0
The unexpected in std::expected
Alex Kremer
A. Kremer
,
Ayaz Salikhov
A. Salikhov
2025-07-14
2025-07
Doc Date
2025-07-14
Abstract
We propose adding a `has_error()` member function to `std::expected` to complement the existing `has_value()` functionality.