N5055 Editors’ Report:
Programming Languages — C++

Date: 2026-07-16

Thomas Köppe (editor, Google DeepMind)
Jens Maurer (co-editor)
Dawn Perchik (co-editor, Bright Side Computing, LLC)
Richard Smith (co-editor, Google Inc)

Email: cxxeditor@gmail.com

Acknowledgments

Thanks to all those who have submitted editorial issues, to those who have provided pull requests with fixes, and to everyone who drafted motion applications. Special thanks to Daniel Hannon and Jan Schultke for drafting many of the motion applications, and to Andreas Krug for continuous, impeccably spaced vigilance.

New papers

Note that N5050 was not approved at any meeting. The last approved working draft was N5046. For the purposes of approval of N5054, please consider both this editors' report together with the previous one, N5051.

Motions incorporated into working draft

Notes on motions

All motions were applied cleanly.

Undefined behaviour and IFNDR

CWG Motion 2 created two new Annexes that list undefined behaviour and IFNDR, respectively, and that add references to those annexes throughout the Standard.

Several subsequent motions affect wording related to undefined behaviour. No changes have been made to those motions nor to the new annexes, and the new references have merely been retained as-is when possible. This means that the material in the annexes will need updating to reflect the changes from the current set of motions. Paper authors are planning to present that update at the next meeting.

In the future, papers are expected to update the UB/IFNDR annexes as part of their proposed wording (similar to how we handle feature test macros now).

Multiple feature test macro increments

Three LWG motions about bitwise operations set or incremented the same feature test macros, so that we now present two sets of values:

Core working group polls

CWG Poll 1. Accept as Defect Reports and apply the proposed resolutions of all issues in P4271R0 (Core Language Working Group “ready” Issues for the June, 2026 meeting) to the C++ Working Paper.

CWG Poll 2. Apply the changes in P3596R3 (Undefined Behavior and IFNDR Annexes) to the C++ Working Paper.

CWG Poll 3. Apply the changes in P2287R6 (Designated-initializers for Base Classes) to the C++ Working Paper.

CWG Poll 4. Accept as a Defect Report and apply the changes in P3899R3 (Clarify the behavior of floating-point overflow) to the C++ Working Paper.

CWG Poll 5. Apply the changes in P3668R4 (Defaulting Postfix Increment and Decrement Operations) to the C++ Working Paper.

CWG Poll 6. Apply the changes in P2953R5 (Adding restrictions to defaulted assignment operator functions) to the C++ Working Paper.

CWG Poll 7. Accept as a Defect Report and apply the changes in P2434R5 (Nondeterministic pointer provenance) to the C++ Working Paper.

CWG Poll 8. Accept as a Defect Report and apply the changes in P3347R6 (Invalid Pointer Operations) to the C++ Working Paper.

CWG Poll 9. Accept as a Defect Report and apply the changes in P3658R1 (Adjust identifier following new Unicode recommendations) to the C++ Working Paper.

CWG Poll 10. Accept as a Defect Report and apply the changes in P3950R1 (return_value & return_void Are Not Mutually Exclusive) to the C++ Working Paper.

CWG Poll 11. Accept as a Defect Report and apply the changes in P3733R1 (More named universal character escapes) to the C++ Working Paper.

CWG Poll 12. Accept as a Defect Report and apply the changes in P3847R1 (Lexical order for lambdas) to the C++ Working Paper.

CWG Poll 13. Accept as a Defect Report and apply the changes in P2243R0 (Language linkage for templates) to the C++ Working Paper.

CWG Poll 14. Apply the changes in P3424R2 (Deallocation Functions with Throwing Exception Specification Are Ill-formed) to the C++ Working Paper.

CWG Poll 15. Apply the changes in P3822R2 (Conditional noexcept specifiers in compound requirements) to the C++ Working Paper.

CWG Poll 16. Apply the changes in P3097R3 (Contracts for C++: Virtual functions) to the C++ Working Paper.

CWG Poll 17. Accept as a Defect Report and Apply the changes in P4101R1 (Consteval-only Values for C++26) to the C++ Working Paper.

CWG Poll 18. Accept as a Defect Report and Apply the changes in P2414R12 (Pointer lifetime-end zap proposed solutions) to the C++ Working Paper.

CWG Poll 19. Apply the changes in P3670R4 (Pack Indexing for Template Names) to the C++ Working Paper.

CWG Poll 20. Apply the changes in P3540R3 (#embed offset parameter) to the C++ Working Paper.

Library working group polls

LWG Poll 1. Apply the changes in P4258R0 (C++ Standard Library Ready Issues to be moved in Brno, Jun. 2026) to the C++ working paper.

LWG Poll 2. Apply the changes in P3319R6 (Add an iota object for SIMD (and more)) to the C++ working paper.

LWG Poll 3. Apply the changes in P3798R1 (The unexpected in std::expected) to the C++ working paper.

LWG Poll 4. Apply the changes in P3052R2 (view_interface::at()) to the C++ working paper.

LWG Poll 5. Apply the changes in P4206R0 (Revert string support in std::constant_wrapper) to the C++ working paper.

LWG Poll 6. Apply the changes in P3395R6 (Fix encoding issues and add a formatter for std::error_code) to the C++ working paper.

LWG Poll 7. Apply the changes in P3505R4 (Fix the default floating-point representation in std::format) to the C++ working paper.

LWG Poll 8. Apply the changes in P3154R3 (Deprecating signed character types in iostreams) to the C++ working paper.

LWG Poll 9. Apply the changes in P3428R4 (Hazard Pointer Batches) to the C++ working paper.

LWG Poll 10. Apply the changes in P3248R5 (Require [u]intptr_t) to the C++ working paper.

LWG Poll 11. Apply the changes in P3793R2 (Better shifting) to the C++ working paper.

LWG Poll 12. Apply the changes in P3242R4 (Copy and fill for mdspan) to the C++ working paper.

LWG Poll 13. Apply the changes in P3692R4 (How to Avoid OOTA Without Really Trying) to the C++ working paper.

LWG Poll 14. Apply the changes in P3104R6 (Bit permutations) to the C++ working paper.

LWG Poll 15. Apply the changes in P3772R2 (std::simd overloads for bit permutations) to the C++ working paper.

LWG Poll 16. Apply the changes in P3091R6 (Better Lookups for map, unordered_map, and flat_map) to the C++ working paper.

LWG Poll 17. Apply the changes in P3125R6 (constexpr pointer tagging) to the C++ working paper.

LWG Poll 18. Apply the changes in P2019R9 (Thread attributes) to the C++ working paper.

LWG Poll 19. Apply the changes in P3785R1 (Library Wording Changes for Defaulted Postfix Increment and Decrement Operations) to the C++ working paper.

Editorial changes

There were no major editorial changes.

Minor editorial changes

A log of editorial fixes made to the working draft since N5046 is below. This list excludes changes that do not affect the body text or only affect whitespace or typeface. For a complete list including such changes (or for the actual deltas applied by these changes), consult the draft sources on GitHub.

commit 3af45b9af76876c306da46aab5742d2525c11dc9
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Tue Jun 2 12:33:47 2026 +0100

    [global.functions] remove Effects: element inside note

commit e74b6e52877565e776bf07a03d477cdb8a71377c
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Mon Jun 8 14:46:17 2026 +0200

    [expr.const.i{nit,mm}] Add xrefs for "manifestly constant-evaluated"

    After the "constant expressions" reorganisation the definition is now
    in a different subclause.

commit 2bc04798c9afc9c1541ad30da9ccb735d4734734
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Tue Jun 9 10:22:39 2026 +0100

    [future.syn] more formal wording for "enum values"

commit 69cd34e38fd3db2047a0104f1f9fdb3ff63ca9e9
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Wed Jun 10 08:21:36 2026 +0200

    [mdspan.layout.leftpad] Fix indentation (#9060)

commit f47fd460571f7fffcf3737c1b1c37f3f44ce6600
Author: A. Jiang <de34@live.cn>
Date:   Thu Jun 11 12:17:15 2026 +0800

    [diff.cpp03.dcl.dcl] Use "unnamed" in lieu of "anonymous" for namespace (#9061)

commit 377e9deaef6dd5538fbb13e2689e5c69b986bea3
Author: Hewill Kang <hewillk@gmail.com>
Date:   Sat Jun 13 05:38:18 2026 +0800

    [range.filter.view] Add missing template keyword (#9064)

commit 2baf431a385434a469a739f6a127aa1f827bd042
Author: Abhinav Agarwal <abhinavagarwal1996@gmail.com>
Date:   Tue Jun 16 10:36:49 2026 -0700

    [mdspan.sub.helpers] Fix swapped offset/extent in canonical-slice (#9139)

commit e66aa58e49b508f94917d3e6ec766e70fc924638
Author: Abhinav Agarwal <abhinavagarwal1996@gmail.com>
Date:   Mon Jun 15 22:23:27 2026 -0700

    [linalg.algs.blas1.iamax] Fix return type of vector_idx_abs_max

    The declarations use extents_type (a std::extents shape type), but the
    Returns clause specifies a scalar index of type size_type. Replace
    extents_type with size_type in [linalg.syn] and [linalg.algs.blas1.iamax].

commit 14ed707bc605912e37e79feabcfe5f227c5994d1
Author: Abhinav Agarwal <abhinavagarwal1996@gmail.com>
Date:   Wed Jun 17 06:18:34 2026 -0700

    [func.wrap.ref.ctor] Restore class T in constant_wrapper constructor head (#9144)

    Fixes a misapplication of P3948R1 (from LWG Motion 16 of the Croydon, 2026 meeting).

commit c870a79c89b3c6545c9e88533d089bd524c91b15
Author: Eisenwave <me@eisenwave.net>
Date:   Sat Jun 20 18:33:44 2026 +0200

    [check] Also diagnose \tcode{\exposid{kebap-case}}, i.e. hyphenated identifiers

commit 2c8ec6d3306e1a1ea32083d38af003779777d8a7
Author: Eisenwave <me@eisenwave.net>
Date:   Sat Jun 20 18:19:37 2026 +0200

    [over.built] Add commas after "e.g."

commit 71cbce1f42adf27b6329ce2a17e37d7a9c2721d5
Author: Abhinav Agarwal <abhinavagarwal1996@gmail.com>
Date:   Sat Jun 20 22:01:56 2026 -0700

    [dcl.contract.func] Fix placeholder and IFNDR comment (#9156)

commit 2d6dec456cd7a6e227e2dcac9f647f6ff05f206c
Author: Abhinav Agarwal <abhinavagarwal1996@gmail.com>
Date:   Sat Jun 20 22:02:46 2026 -0700

    [exec.when.all] Fix receiver parameter name (#9158)

commit 368b3b200ca326d48d944d28787550fa1abcb0bf
Author: Abhinav Agarwal <abhinavagarwal1996@gmail.com>
Date:   Sat Jun 20 22:03:55 2026 -0700

    [mdspan.sub] Fix S::extend_type typo (#9157)

commit 24d1b7ea63537ffedc8fdd956132842783b8a465
Author: Abhinav Agarwal <abhinavagarwal1996@gmail.com>
Date:   Fri Jul 3 13:15:22 2026 -0700

    [basic.life] Add cross-reference to [obj.lifetime] (#9169)

commit f7649bdf0c982275fc40b1c118a1f28ea18c843e
Author: Abhinav Agarwal <abhinavagarwal1996@gmail.com>
Date:   Tue Jun 16 21:15:15 2026 -0700

    [simd.math,simd.reductions] Fix two undeclared identifiers in std::simd

    Two adjacent std::simd specifications name an identifier introduced
    nowhere in the enclosing itemdescr:

    - [simd.math]: the exposition-only modf-vec helper sizes its staging
      array with Ret::size(), but the only Let-bound vector type here is V;
      Ret is a leftover from frexp-vec (where Ret is bound). Use V::size().

    - [simd.reductions]: masked reduce_max returns
      numeric_limits<V::value_type>::lowest(), but its template head only
      introduces T and Abi (no V). Use numeric_limits<T>::lowest(), matching
      masked reduce_min and scalar reduce_max.

commit b6da2bc53d2eab59c2379720aa3270ac360b70a6
Author: Abhinav Agarwal <abhinavagarwal1996@gmail.com>
Date:   Wed Jun 17 08:30:37 2026 -0700

    [simd.reductions] Name x and mask parameters in masked reduce_min/reduce_max

    The masked reduce_min and reduce_max declarations leave both parameters
    unnamed, but their Returns elements refer to x and mask. Name the
    parameters x and mask so the declarations match their descriptions.

commit c85c406386d9899f13d19704be1143087809256a
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Wed Jul 15 09:06:51 2026 +0200

    [diff.cpp26.basic] Fix typo

commit f8bcc253ba73193857594c76f3e1b9ceb2ba227f
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Wed Jul 15 07:40:35 2026 +0200

    [uaxid.def.general] Fix typo

commit 66bdb78b4ad58c83f1dda36e97ed504246523a8e
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Jul 15 12:17:57 2026 +0100

    [exec.as.awaitable] Reinstate missing word "where".

    Misapplication of LWG4359 in LWG Motion 1 (P4258R0).

commit c8ac6a609fd13b56032ff02c19c533d8bfcc6cf8
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Jul 15 12:36:34 2026 +0100

    [basic.types.trivial] Fix bad implementation-defined grammar.

commit 46ab66c3570ee53255c3a508610ab36b8fe30c6d
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Thu Jul 16 08:29:43 2026 +0200

    [mdspan.copy] Fix singular/plural mismatch

commit 57b9fadb00c9f69457dac69d598c87088b6de99f
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Mon Jul 13 13:24:50 2026 +0200

    [basic.contract.handler] Move period to end of sentence

commit ccc221f5a77a8c222c35708ad7e48800842f06a7
Author: Eisenwave <me@eisenwave.net>
Date:   Wed Jul 15 21:34:34 2026 +0200

    [syserr.fmt] Replace \unicode with \ucode to render U+FFFD

commit d14c10e0c06b3ed7e6317ce5178a3ceeca09e617
Author: Eisenwave <me@eisenwave.net>
Date:   Thu Jul 16 06:39:23 2026 +0200

    [ub:expr.call.different.type] Add missing apostrophe inside "functions"

commit f028afea499b07bd6c8b7d0eaec218af57e32d2d
Author: Eisenwave <me@eisenwave.net>
Date:   Thu Jul 16 06:37:41 2026 +0200

    [ub:conv.fpint.float.not.represented] Add comma after "undefined behavior" in comment

commit 40a6c36d53e7bca517a1a5146c3a20b6f99466b5
Author: Abhinav Agarwal <abhinavagarwal1996@gmail.com>
Date:   Thu Jul 16 05:36:14 2026 -0700

    [exec.let] Fix missing parentheses (#9143)

    Misapplication of P3826R5.

commit ca7bc9714a7324ecad9f66d743682831f238cac7
Author: A. Jiang <de34@live.cn>
Date:   Wed May 27 22:17:43 2026 +0800

    [numarray] Move [valarray.range] to suitable place and level

    For the sake of consistency with the synopsis of `valarray` (after the
    modifications from P3016R6), [valarray.cassign] should be placed between
    [valarray.cassign] and [valarray.members]. Moreover, it should be in
    level `\rSec3` now.

commit 19f519eb7ea6248ee63c6728933726d52d4e2e55
Author: Daniel Hannon <hello111f@gmail.com>
Date:   Sun Jun 21 13:41:12 2026 +0100

    [vector.capacity] vector::reserve is tutorial-like

commit a87774f445ac54493c4128c99d1a23ee22a5f22b
Author: Abhinav Agarwal <abhinavagarwal1996@gmail.com>
Date:   Sun Jun 21 15:43:24 2026 -0700

    [exec.stopped.opt] Add transform_sender tag

commit 379893062773fdbc4ceaf667715807e2edc48108
Author: Hewill Kang <hewillk@gmail.com>
Date:   Sun Jun 14 16:04:04 2026 +0800

    [range.join.view, range.join.with.view]

    Make the comment more smooth.

commit e253e0e33ffd6040ae03dc233e207ea6c0a108e2
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Thu Jul 16 14:27:07 2026 +0100

    [charconv.to.chars] remove std:: qualification

commit b2028659e07292300cac09a7de94f9f1723dc346
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Thu Jul 16 13:06:10 2026 +0100

    [thread.{thread.constr,jthread.cons}] Move the "existence of $i$ to Mandates:.

    This change separates the local notational definitions from the
    requirement whose violation makes the program ill-formed: the latter
    should probably appear in one of the standard Elements rather than in
    a rogue paragraph.

commit f63180f933371e39612b0c1d6b71ba243be9d7b8
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Jul 15 17:34:28 2026 +0100

    [bit.permute] Create notation for the popcount of the first n bits.

    This avoids having to put a complex expression into sub- and
    superscripts in the definitions of "expand" and "compress".

    We itemize the definitions for improved legibility.