WG21 PAPERS

Mailings Beta

Volunteer-driven · Not affiliated with WG21 or ISO

Filter and export papers from the C++ Committee’s monthly mailings by time frame and audience using the options below, or refine your export further with the Select button. Links point directly to the official WG21 papers on open-std.org.

Disposition Updated

Audience
General
Wording
Evolution
Study Groups
Mailings
1 · Year 1 · Month

Select the arrow to the right of the year to filter for specific months.

2026 Aug · 1 of 6

Pick months in 2026

Filters Clear all
48 out of 48 papers selected for export
SelectPaper Title Authors Audience Doc Date
N5056 Business Plan and Convener's Report: ISO/IEC JTC 1/SC 22/WG 21 (C++) G. Davidson 2026-07-28
Doc Date 2026-07-28
Mailing Date 2026-08 Unassigned
Author(s) Guy Davidson
Target Audience WG21
P2249R7 Mixed comparisons for smart pointers G. D'Angelo 2026-07-22
Doc Date 2026-07-22
Mailing Date 2026-08 Unassigned
Author(s) Giuseppe D'Angelo
Target Audience LEWGLWG
Tracking issue View on GitHub
Abstract Smart pointer classes are universally recognized as the idiomatic way to express ownership of a resource (very incomplete list: [Sutter], [Meyers], [R.20]). On the other hand, raw pointers (and references) are supposed to be used as non-owning types to access a resource.
P2806R5 do expressions B. Revzin, B. Lopez, Z. Laine, M. Park 2026-08-13
Doc Date 2026-08-13
Mailing Date 2026-08 Unassigned
Target Audience EWG
Revisions R4
Tracking issue View on GitHub
Abstract We propose the addition of a new kind of expression, called a `do` expression. In its simplest form:
P3100R8 A framework for systematically addressing undefined behaviour in the C++ Standard T. Doumler, J. Berne 2026-08-14
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Target Audience EWGLEWG
Revisions R7R6
Tracking issue View on GitHub
Abstract In this paper, we enumerate all cases of core language undefined behaviour explicitly specified in the C++ Standard, group them into ten categories, and classify them along a number of relevant criteria.
P3139R2 Pointer cast for unique_ptr Z. Yuan, J. Saxonberg 2026-08-14
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Target Audience LEWG
Tracking issue View on GitHub
Abstract We propose `unique_ptr` overloads for `std::const_pointer_cast` and `std::dynamic_pointer_cast`. For each kind of cast, we allow users to choose between either using the defaulted deleter or preserving the original deleter type for each kind of cast.
P3216R4 views::slice H. Kang 2026-07-27
Doc Date 2026-07-27
Mailing Date 2026-08 Unassigned
Author(s) Hewill Kang
Target Audience LEWGLWGSG9
Revisions R3
Tracking issue View on GitHub
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.
P3351R5 views::scan Y. Li 2026-08-12
Doc Date 2026-08-12
Mailing Date 2026-08 Unassigned
Author(s) Yihe Li
Target Audience LEWG
Revisions R4
Tracking issue View on GitHub
Abstract The motivation for this view is given in [P2760R1] and quoted below for convenience:
P3423R2 Extending User-Generated Diagnostic Messages Y. Li 2026-07-22
Doc Date 2026-07-22
Mailing Date 2026-08 Unassigned
Author(s) Yihe Li
Target Audience CWG
Tracking issue View on GitHub
Abstract The first appearance of the compile-time message parameter in the C++ core language is in C++11, where `static_assert` declaration was introduced into the language by [N1720] with the syntax `static_assert(condition, message)`. At that time, the message parameter was the first time that users of the C++ language were able to control the generation of diagnostic messages in a dynamic way (excluding
P3424R2 Define Delete With Throwing Exception Specification A. Meredith 2026-07-17
Doc Date 2026-07-17
Mailing Date 2026-08 Unassigned
Author(s) Alisdair Meredith
Target Audience CWG
Tracking issue View on GitHub
Disposition Date 2026-06Adopted
Abstract Throwing from an overloaded `delete` operator is undefined behavior, yet `delete` operators have a non-throwing exception specification by default, leading to a deterministic call to `terminate` before any undefined behavior can occur. This paper suggests we can do better than “undefined behavior” for the remaining cases.
P3427R8 Hazard Pointer Synchronous Reclamation M. Michael, M. Wong, P. McKenney, M. Wever 2026-08-12
Doc Date 2026-08-12
Mailing Date 2026-08 Unassigned
Target Audience LWG
Revisions R7R6R5R4R3
Tracking issue View on GitHub
Abstract This paper proposes extending the C++26 hazard pointer interface to support synchronous reclamation. This revision, P3427R8, revises R7 by following LWG 2026-07-24 feedback. Ready for LWG review.
P3589R3 C++ Profiles: The Framework G. Reis 2026-07-21
Doc Date 2026-07-21
Mailing Date 2026-08 Unassigned
Author(s) Gabriel Dos Reis
Target Audience EWG
Tracking issue View on GitHub
P3817R0 Structured Binding Assignments Y. yonisimian@gmail.com, R. regev.ran@gmail.com 2026-07-28
Doc Date 2026-07-28
Mailing Date 2026-08 Unassigned
Target Audience EWGSG17
Abstract This proposal introduces an extension to C++ structured bindings, allowing assignment to existing variables.
P3904R3 When paths go WTF: making formatting lossless V. Zverovich 2026-08-12
Doc Date 2026-08-12
Mailing Date 2026-08 Unassigned
Author(s) Victor Zverovich
Target Audience SG16
Revisions R2R1
Tracking issue View on GitHub
Abstract [P2845], adopted in C++26, added formatting support for `std::filesystem::path`, addressing encoding issues and making formatting of a path as an ordinary (`char`) string lossless except for one case, unpaired surrogates on Windows. This paper proposes addressing this case and making such formatting lossless by default via the WTF-8 encoding ([WTF-8]). This will improve consistency in path handlin
P3955R1 It's Scopes All the Way Down R. Leahy 2026-08-10
Doc Date 2026-08-10
Mailing Date 2026-08 Unassigned
Author(s) Robert Leahy
Target Audience LEWGSG1
Revisions R0
Tracking issue View on GitHub
Abstract The fundamental scope algorithm is `within`. It establishes a scope by running an enter scope sender. Thereafter it allows a child operation to run (in that scope since the exit scope sender has not yet run), and then before completing the overall operation runs the exit scope sender yielded by the enter scope sender.
P4049R1 Relaxing and extending std::copy G. D'Angelo 2026-07-30
Doc Date 2026-07-30
Mailing Date 2026-08 Unassigned
Author(s) Giuseppe D'Angelo
Target Audience LEWGLWG
Revisions R0
Tracking issue View on GitHub
Abstract In this table we’re summarizing the status quo and the changes brought by the options and extensions illustrated above. The table refers to `std::copy`, but similar changes are expected for the other algorithms of the family.
P4130R0 SD-4: Five Correctives Inspired by ISO Directives V. Falco 2026-08-14
Intent Inform
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Author(s) Vinnie Falco
Target Audience WG21
Abstract [SD-4](https://isocpp.org/std/standing-documents/sd-4-wg21-practices-and-procedures) [1] lets the convenor appoint every subgroup chair, set the meeting schedule, and declare consensus.
P4199R0 A Reader's Guide to the August 2026 Mailing V. Falco 2026-08-14
Intent Inform
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Author(s) Vinnie Falco
Target Audience WG21
Abstract Ten papers deliver a working profiles prototype covering seventy-seven cases of core-language undefined behavior with zero foundational wording changes, propose five governance correctives drawn verbatim from ISO Directives, and document how
P4205R1 Range-Based Searchers Y. Li 2026-07-22
Doc Date 2026-07-22
Mailing Date 2026-08 Unassigned
Author(s) Yihe Li
Target Audience SG9
Revisions R0
Tracking issue View on GitHub
Abstract Current inconsistency in the `std::ranges::search` API forces users to exit the Ranges world to use searchers and resort to using traditional STL algorithms instead, which is undesirable.
P4222R2 An initialization profile (R1) B. Stroustrup 2026-08-14
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Author(s) Bjarne Stroustrup
Target Audience EWGSG23
Revisions R1R0
Tracking issue View on GitHub
Abstract The initialization profile should be the easiest to define, but there can be no profile that everybody can agree on without discussion and alternative choices. Also, the rules for initialization and uninitialized memory are far more complex than most people are willing to believe. The initialization profile is foundational to just about every profile, so the initialization profile must isolate tho
P4238R0 Returning C++26 for the Evaluation It Skipped V. Falco 2026-08-14
Intent Inform
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Author(s) Vinnie Falco
Target Audience WG21
Abstract Contracts entered C++26 through procedural moves that broke no rule yet left no record of having reconciled the sustained technical opposition to the design.
P4277R0 Overview and Implementation Report for P3100 J. Berne 2026-08-13
Doc Date 2026-08-13
Mailing Date 2026-08 Unassigned
Author(s) Joshua Berne
Target Audience EWG
P4282R1 Away From co_yield For std::execution::task R. Leahy 2026-08-02
Doc Date 2026-08-02
Mailing Date 2026-08 Unassigned
Author(s) Robert Leahy
Target Audience LEWGSG1
Revisions R0
Tracking issue View on GitHub
Abstract The coroutine promise protocol shipped in C++20 not only banned `return_void` and `return_value` on the same promise type, but did so in an unusually restrictive manner [1]. Notably the aforementioned manner barred implementing the aforementioned mutual exclusion via mutually exclusive constraints.
P4284R0 Addenda to the Undefined Behavior and IFNDR Annexes J. Berne 2026-08-13
Doc Date 2026-08-13
Mailing Date 2026-08 Unassigned
Author(s) Joshua Berne
Target Audience CWG
P4288R1 Stop the Decay R. Leahy 2026-07-31
Doc Date 2026-07-31
Mailing Date 2026-08 Unassigned
Author(s) Robert Leahy
Target Audience LEWGSG1
Revisions R0
Tracking issue View on GitHub
Abstract `std::execution` can be thought of as the realization of the asynchronous analogue of a synchronous function [1][2]. The sender is the function itself (with all arguments selected and applied), the receiver is the channel by which the function communicates with its caller (in the synchronous realm by returning or throwing), and the operation state is the “stack” (i.e. a collection of variables wit
P4294R1 views::take_last and views::drop_last H. Kang 2026-07-20
Doc Date 2026-07-20
Mailing Date 2026-08 Unassigned
Author(s) Hewill Kang
Target Audience LEWGLWGSG9
Revisions R0
Tracking issue View on GitHub
Abstract This paper proposes two new range adaptors, `views::take_last` and `views::drop_last`, that respectively produce the last *N* elements of a range and all-but-the-last *N* elements of a range. They mirror the shape of the existing `views::take` / `views::drop` adaptors and fill an obvious gap in the standard range adaptor set.
P4297R1 Severing P3100's Profiles Claim from Its Case-by-Case Review V. Falco, V. Voutilainen 2026-08-14
Intent Ask
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Target Audience EWG
Revisions R0
Tracking issue View on GitHub
Abstract This paper asks EWG (the Evolution Working Group) to sever an unadopted architecture claim from the wording it is bundled with, so that the wording proceeds and the claim gets its own paper and poll.
P4302R1 Any Delegate May Object to a Poll on an Unmailed Revision V. Falco 2026-08-14
Intent Ask
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Author(s) Vinnie Falco
Target Audience WG21
Revisions R0
Tracking issue View on GitHub
Abstract WG21 sometimes records polls on paper revisions that did not appear in a pre-meeting mailing. When an in-meeting revision changes the design, recording the poll can shift the consensus burden before national body experts have seen the change.
P4306R1 Configuring Runtime Checking: Profiles and Implicit Contract Assertions V. Falco, V. Voutilainen 2026-08-14
Intent Inform
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Target Audience WG21
Revisions R0
Tracking issue View on GitHub
Abstract P3100R8 proposes that implicit contract assertions, configured through Contracts evaluation semantics and Labels, control runtime checking of core-language undefined behavior. The Profiles papers, P3589R2 and P3984R0, instead make a Profile the named mechanism that selects and defines such guarantees.
P4308R1 Eight Responses to a Throwing Implicit Contract Assertion V. Falco, V. Voutilainen 2026-08-14
Intent Inform
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Target Audience WG21
Revisions R0
Tracking issue View on GitHub
Abstract The response space for a throwing implicit contract assertion contains at least eight options, not the four before EWG.
P4310R1 Hasta la Vista, Undefined Behavior: Why std::core_ub Should Terminate by Default V. Falco, V. Voutilainen 2026-08-14
Intent Inform
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Target Audience WG21
Revisions R0
Tracking issue View on GitHub
Abstract `std::core_ub` (P4317R1) guards the runtime-checkable cases of core-language undefined behaviour and, when enforced, guarantees the check runs. It leaves one question open: after a guarded violation is detected, does the program continue or terminate? This paper answers terminate. Whether contracts are the right substrate for these checks at all is argued against them in P4332R0; this paper takes
P4311R1 Getting a const element type version of an mdspan accessor, and of an mdspan too M. Hoemmen, R. Parolin 2026-08-14
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Target Audience LEWG
Revisions R0
Tracking issue View on GitHub
Abstract Given an accessor `a` of type `A`, a “const element type version of `a`” (if it exists) is an accessor `b` of a possibly different type `B`, where
P4313R1 Bitmask operations for enums I. Guterman, A. Williams 2026-07-21
Doc Date 2026-07-21
Mailing Date 2026-08 Unassigned
Target Audience LEWG
Revisions R0
Tracking issue View on GitHub
Abstract As a developer coming from languages other than C++, I grew accustomed to using enums to represent flags. However, such behavior is noticeably absent from the C++ language.
P4317R1 A Profile for Runtime-Checkable Core-Language Undefined Behavior: std::core_ub V. Falco 2026-08-14
Intent Inform
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Author(s) Vinnie Falco
Target Audience WG21
Revisions R0
Tracking issue View on GitHub
Abstract P4297R1 [1] asks EWG to sever P3100R8's architecture claim from its case-by-case wording review. This paper demonstrates the severing is feasible.
P4318R1 Transient Benefit, Perpetual Cost: Implicit Core-Language Assertions V. Falco 2026-08-14
Intent Inform
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Author(s) Vinnie Falco
Target Audience WG21
Revisions R0
Tracking issue View on GitHub
Abstract Standardizing a continuing (log-and-continue) response for implicit contract assertions on core-language undefined behavior, as a portable guarantee every implementation carries, returns less than it costs.
P4323R0 Do do_return! J. Schultke 2026-08-11
Doc Date 2026-08-11
Mailing Date 2026-08 Unassigned
Author(s) Jan Schultke
Target Audience EWG
Abstract [[P2806R4]](https://wg21%2elink/p2806r4) proposed to let the user omit the last semicolon in a `do` expression to yield a result. This paper argues against that feature for a variety of reasons.
P4324R0 Exploration of a more library-oriented approach to contracts V. Voutilainen, V. Voutilainen 2026-08-14
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Target Audience EWG
Abstract This paper supplies a design and implementation exploration for a more library-oriented approach to contracts.
P4327R0 Direct-list-initialization syntax for default function arguments U. Radu-Andrei 2026-08-10
Doc Date 2026-08-10
Mailing Date 2026-08 Unassigned
Target Audience EWG
Abstract A parameter declaration may contain a braced-init-list immediately following the `declarator`.
P4329R0 variant_sender R. Leahy 2026-07-29
Doc Date 2026-07-29
Mailing Date 2026-08 Unassigned
Author(s) Robert Leahy
Target Audience LEWGSG1
Abstract Under the status quo of the C++29 working draft one can write asynchronous code which branches synchronously:
P4330R0 Analysis of Contracts Papers V. Falco 2026-08-14
Intent Inform
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Author(s) Vinnie Falco
Target Audience WG21
Abstract This paper examines select papers that propose to extend P2900 contracts. Each paper is evaluated through two lenses:
P4332R0 Contracts are inappropriate for undefined behavior checks J. Spicer, V. Voutilainen, B. Stroustrup, V. Falco, J. Sanchez 2026-07-31
Doc Date 2026-07-31
Mailing Date 2026-08 Unassigned
Target Audience EWGSG23WG21
Abstract This document makes one narrow claim: that the mechanism P2900 defines for contract assertions is the wrong mechanism for checks whose purpose is to detect or mitigate core-language undefined behavior, as proposed by P3100. The claim does not depend on any hostile reading of contracts. It follows from what the contracts proposal says about itself: P3846R1 concedes that guaranteed enforcement is a
P4334R0 P2900 Contracts’ fundamental flaws B. Stroustrup, J. Garcia, V. Falco, J. Spicer, V. Voutilainen 2026-08-14
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Target Audience WG21
P4337R0 emplace_from R. Leahy 2026-08-03
Doc Date 2026-08-03
Mailing Date 2026-08 Unassigned
Author(s) Robert Leahy
Target Audience LEWGSG18
Abstract Enabled by variadic templates and forwarding references, C++11 brought emplace construction. Containers, wrappers, et cetera could provide variadic constructors or functions which forwarded arguments through to a constructor of some wrapped or contained type thereby creating an instance of that type without intervening temporaries (which would be copied or moved from).
P4338R0 deduce R. Leahy 2026-08-03
Doc Date 2026-08-03
Mailing Date 2026-08 Unassigned
Author(s) Robert Leahy
Target Audience LEWGSG18
Abstract `emplace_from` is a proposed standard library class template which enables emplace functionality (e.g. `std::vector::emplace_back`, `std::optional::emplace`, et cetera) to be used to construct immovable types returned by factory functions (e.g. `std::execution::connect`).
P4340R0 Extending constant template parameter support by customizing std::meta::reflect_constant B. Revzin 2026-08-13
Doc Date 2026-08-13
Mailing Date 2026-08 Unassigned
Author(s) Barry Revzin
Target Audience EWG
Abstract This is a follow-up to [[P2484R0] (Extending class types as non-type template parameters)](https://wg21.link/p2484r0) and [[P3380R1] (Extending support for class types as non-type template parameters)](https://wg21.link/p3380r1) (the latter of which starts with a useful reading list), and is a new solution to that problem building upon three insights:
P4343R0 Adding clear() to Container Adaptors S. Avasthi 2026-08-11
Doc Date 2026-08-11
Mailing Date 2026-08 Unassigned
Author(s) Shubham Avasthi
Target Audience SG18
Abstract Currently, there is no standardized, zero-overhead way to clear the elements of container adaptors. When developers need to reuse a <ins>std::priority_queue or std::queue</ins> in a performance-critical loop, they are forced to use one of two suboptimal workarounds:
P4344R0 pure alias types J. Waterloo 2026-08-13
Doc Date 2026-08-13
Mailing Date 2026-08 Unassigned
Author(s) Jarrad Waterloo
Target Audience CWGSG17SG23
Abstract By formalizing `pure alias types`, we remove seeming inconsistencies between references and other alias types. This will result in fewer instances of immediate dangling, return based dangling and superfluous aliasing.
P4347R0 How to decouple UB-checks from Contracts V. Voutilainen 2026-08-14
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Author(s) Ville Voutilainen
Target Audience EWG
Abstract This paper explains how to decouple UB-checks from Contracts. Because multiple people have expressed a desire to look at that. Further, this paper explains how to do that without redefining Undefined Behavior. This paper focuses on *how*. This paper doesn't focus on *why*.
P4348R0 Types and Attributes B. Stroustrup 2026-08-14
Doc Date 2026-08-14
Mailing Date 2026-08 Unassigned
Author(s) Bjarne Stroustrup
Target Audience EWGSG23
Abstract ```cpp The most important examples involve function calls that pass a pointer to initialized or uninitialized memory. Marking an argument with [[ref_to_uninit]] means that that argument must refer to uninitialized memory. If not, the initialization profile requires that that an argument refers to an initialized object. Consider int x [[uninit]]; using T = decltype(x); // does T accept a pointer to
Showing 48 of 48 papers · source: open-std.org