N4994 Editors’ Report:
Programming Languages — C++

Date: 2024-10-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

Acknowledgements

Thanks to all those who have submitted editorial issues and to those who have provided pull requests with fixes.

New papers

Draft approval

The previous drafts N4986 and N4988 were not approved at any WG21 meeting. For approval of this draft, N4993, please consult the previous Editors' reports N4987 and N4989 as well as this one.

No motions

There have been no new, approved WG21 motions. This revision contains only editorial changes.

A few of the editorial changes fix mistakes in our LaTeX sources that were reported to us by the ISO secretariat during the ongoing publication of C++23.

Editorial changes

Major editorial changes

For this revision, we have reorganised several clauses and subclauses. As a reminder: the editorial team aims to perform only one major reorganisation that changes top-level clause numbers per C++ revision, and this is it for C++26.

The changes create a new clause "Text processing library [text]" that collects formatting, conversions, locales, regular expressions, and text-related C library facilities. Clauses are rearranged as:

The new [text] clause obtains the following contents:

Additionally, the following subclauses are moved:

This removes a number of unrelated clauses from the large [utilities] clause.

Finally, we spread the synopses in [containers] out to appear right in front of the classes they define.

Minor editorial changes

A log of editorial fixes made to the working draft since N4988 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 15a43d522467d389bd9340081d65dbf17d44d255
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Mon Aug 5 12:21:56 2024 +0100

    [temp.over.link] Reword to clarify that declarations correspond (#5999)

commit 3c0f4cf0a03892157ebf3a472d3e9450a41f038e
Author: Lewis Baker <lewissbaker@users.noreply.github.com>
Date:   Sun Aug 4 09:26:26 2024 +0930

    [snd.expos] Fix typo in definition of SCHED-ENV exposition-only helper

    Change `o1` -> `o2` to reference the expression declared as part of the definition of `SCHED-ENV`.

commit 5056b86597f5ba9278601db46a415f2d76e1bc8f
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Aug 2 17:38:05 2024 +0200

    [temp.constr.order] Reflect fold expanded constraints in footnotes

commit c92bc384b118412322f9893832508bf17f46f644
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Aug 1 12:35:50 2024 +0200

    [dcl.fct] Fix obsolete phrasing when defining 'function type'

commit fabbff2d812e0a99bd1162460812ec2f5399636e
Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
Date:   Thu Aug 8 17:15:39 2024 -0400

    [sequences] Consistent comma in "If X, there are no effects" (#7139)

commit 04c5a0c509dbf8f9f81223d1de5bb917cd3074c5
Author: Hana Dusíková <hanicka@hanicka.net>
Date:   Tue Aug 20 12:21:43 2024 +0200

    [meta.const.eval] Fix function declaration in example (#7234)

commit ab4c0663dc72f09fb8ef6c366352c9d1a68e8fa9
Author: Vlad Serebrennikov <serebrennikov.vladislav@gmail.com>
Date:   Fri Aug 23 22:06:05 2024 +0400

    [expr.prim.lambda.capture] Incorporate ellipsis into "captured by copy" definition

commit 6ea6df4c96653d6696bb0133253ea0159b0f278f
Author: Vlad Serebrennikov <serebrennikov.vladislav@gmail.com>
Date:   Sat Aug 24 23:24:01 2024 +0400

    [dcl.type.elab] Remove redundant full stop (#7242)

commit 24ceda755967b022e8e089d4f0cdcf4bc99a4adb
Author: Hewill Kang <hewillk@gmail.com>
Date:   Mon Aug 26 18:29:28 2024 +0800

    [exec.snd.apply,exec.schedule.from] Properly mark "see below" (#7210)

commit 447b6291061d50a582f72dd42d9d6265857ded5c
Author: Joachim Wuttke <j.wuttke@fz-juelich.de>
Date:   Mon Aug 26 22:30:39 2024 +0200

    [numerics] Correct typo Bessell -> Bessel (#7244)

commit db0ca108a9b44ef8f06338ecf68f1e4653be4267
Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
Date:   Thu Aug 29 06:13:18 2024 -0400

    [inplace.vector] Fix some spelling/grammar issues (#7243)

commit 21e477fb6dbfa7813eb2263bfa31c748bdce589b
Author: Casey Carter <Casey@Carter.net>
Date:   Fri Aug 30 05:07:36 2024 -0700

    [lib] Remove `inline` from variable templates (#7240)

commit c001805bb769fe237034151d59ddd20835a17298
Author: A. Jiang <de34@live.cn>
Date:   Fri Aug 30 20:52:00 2024 +0800

    [lib] Remove `friend class X` (#6427)

    Friendship between library classes is considered an implementation detail.

commit 1fafde9a04a3760debb932839791b1d2047ba432
Author: A. Jiang <de34@live.cn>
Date:   Fri Aug 30 20:52:49 2024 +0800

    [fs.class.directory.entry.general] Remove superfluous "unneeded" (#7245)

commit e010cf6cde64a498c2bc4291e7e79e66e8ace79a
Author: Vlad Serebrennikov <serebrennikov.vladislav@gmail.com>
Date:   Fri Aug 23 21:03:51 2024 +0400

    [basic.scope.scope] Fix a note about declarations that do not bind names

    The note is saying that declarations of qualified names do not bind names, but this is not supported by normative wording in [dcl.meaning]

commit 36a1f39068e71d69e4ca534c5b72891055675e88
Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
Date:   Wed Sep 4 10:23:14 2024 -0400

    [forward.list] Replace misplaced comma with period (#7246)

commit f23059bf704a48b4805db28441ec73b61054ab9d
Author: A. Jiang <de34@live.cn>
Date:   Thu Sep 5 00:03:56 2024 +0800

    [optional.syn] Use `decay_t<T>` directly instead of "see below" (#7247)

commit 9d9a3777f1a571dd2648023fe70848c32aebda09
Author: Casey Carter <Casey@Carter.net>
Date:   Sun Sep 8 12:13:53 2024 -0700

    [associative.reqmts.general,unord.req.general] Fix cross-references to [container.alloc.reqmts] and [container.reqmts] (#7249)

    Both paragraphs incorrectly point to [container.reqmts] instead of [container.alloc.reqmts] for "the requirements of an allocator-aware container".

commit d930c5fa6728dd0b599f9c7918a2f0a0f747aaa2
Author: Jan Schultke <me@eisenwave.net>
Date:   Mon Sep 16 20:35:33 2024 +0200

    [expr.delete] Remove stray "the" between words (#7253)

commit 9243ba5befaea8fd3e878e6114942db8d556a6e0
Author: Steve Downey <sdowney@gmail.com>
Date:   Tue Sep 17 06:13:18 2024 -0400

    [optional.assign] Use itemized list for operator=(U&& v) constraints (#7255)

commit 4930897a2a45fa57fd9d766a24229a9e3f14f23e
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Aug 21 13:58:22 2021 +0200

    [dcl.spec.general,dcl.fct.spec] Clarify duplication of decl-specifiers

commit d0c00bf629f4b91d19176c2397aa3ff7c1c0ce63
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Sep 26 18:49:15 2024 +0200

    [tab:lex.charset.literal] Shorten table heading

    Fixes ISO/CS comment (C++23 proof)

commit 945b1c071ed511d11a2152aa70e08290f91a7856
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Sep 26 19:11:58 2024 +0200

    [tab:re.matchflag] Shorten table heading

    Fixes ISO/CS comment (C++23 proof)

commit 4e34492bc7279fedb0e066f4925860e686fa81dc
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Sep 26 19:43:50 2024 +0200

    [rand.req] Fix table headers for longtable continued on following page

    Fixes ISO/CS comment (C++23 proof)

commit 2b1e6d2952987bf4ada8275212a7bb297bb0c1c7
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Sep 26 20:19:01 2024 +0200

    [macros] Fix duplicate vertical lines visible in tables in [optional.assign]

    Fixes ISO/CS comment (C++23 proof)

commit 0680a08ee677e0970b4460fd614f58b122845047
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Thu Sep 26 21:59:34 2024 +0100

    [ios.init] Remove unused Init::init_cnt static member (#7263)

    The text that made use of this variable was removed by LWG1123 and has
    not been present in the WP since N3090. The effects of Init construction
    and destruction are specified entirely without the use of this variable,
    so it serves no purpose now.

commit afdd158f555892507bc44c6d372c3b45a7f09832
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Sep 27 00:09:11 2024 +0200

    [styles] Format title of \codeblocktu using 'caption' package

    This restores the C++20 status of the formatting.

commit 2b3e09e2cc773b7205310917c5a6b2bdd87340af
Author: Casey Carter <Casey@Carter.net>
Date:   Tue Oct 1 03:22:29 2024 -0700

    [inplace.vector.cons] "Constructs an object" is redundant (#7252)

commit 70954edf0b2c915d9b2ca4a1cff99b1c1cba2089
Author: Alisdair Meredith <alisdairm@me.com>
Date:   Tue Oct 1 23:09:04 2024 -0400

    [depr.lit] Fix grammar according to P2361R6

    P2361R6 introduced the notion of unevaluated strings, and
    updated the grammar for literal operator function accodingly.
    Unfortunely, the corresponding grammar reference that was
    deprecated was not similarly updated.

commit 08b167d5476c9fd02a7a0484ae031cb358a99ddf
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Sat Oct 5 22:24:02 2024 +0100

    [priqueue.cons.alloc] Add missing initialization for comp (#7291)

    This is consistent with p2 and p8 which also value-initialize it.

commit 738b14f990e0575a3ca63b579d87edb5a6133ffb
Author: Casey Carter <Casey@Carter.net>
Date:   Sat Oct 5 15:03:04 2024 -0700

    [array.creation] Clarify "Mandates" for `to_array` overloads (#7286)

    It's confusing that these `to_array` overloads require `T` to be constructible from various types, when they actually construct `remove_cv_t<T>` objects. We experts know that initialization doesn't depend on the cv-qualification of the target type ([dcl.init.general]/16), but there's no need to make readers jump through hoops to understand the spec.

commit d5c9f2d248860e8e7de78f595b93a8b01c7e02c8
Author: Lewis Baker <lewissbaker@users.noreply.github.com>
Date:   Tue Oct 8 21:07:48 2024 +1030

    [exec.split,exec.when.all] Fix typo stop_callback_of_t -> stop_callback_for_t (#7295)

commit 58c01ba5765e8c91ce4aab462d25247167a7e481
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Tue Oct 8 11:38:42 2024 +0100

    [re.grammar] Add missing backslash to UnicodeEscapeSequence example (#7290)

commit ebef68dd9f1c3bccfe06d14eb83c05a7a35dcec3
Author: Lewis Baker <lewissbaker@users.noreply.github.com>
Date:   Tue Oct 8 22:06:23 2024 +1030

    [exec.just] Add missing LaTeX escape for product-type construction (#7216)

commit 7ea8f59e19842e720360f15b64c2199ea27641ac
Author: A. Jiang <de34@live.cn>
Date:   Thu Oct 10 17:53:54 2024 +0800

    [mutex.syn] Add missing ',' for consistency

commit 7c6322a59e3359c5002357831328b25939cd5383
Author: Lewis Baker <lewissbaker@users.noreply.github.com>
Date:   Sun Oct 13 04:07:30 2024 +1030

    [stoptoken.concepts] Remove redundant 'swappable<Token>' clause from 'stoppable_token' concept (#7299)

    The `stoppable_token<Token>` concept requires both `copyable<Token>` and `swappable<Token>`. However, the `copyable<Token>` requirement already subsumes `movable<Token>`, which subsumes `swappable<Token>`.

    Therefore the requirement for `swappable<Token>` can be removed from the `stoppable_token` concept definition with no semantic change.

commit 9bf42221ab5a52ef10cb980a22e8a9617dbbf18b
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Sat Oct 12 22:39:57 2024 +0200

    [rcu.syn] Add missing ',' in comment (#7301)

commit a0411db859cf1eabc2be24a5d2add4eaf288dac5
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Oct 14 12:30:30 2024 +0200

    [expr.const] Add paragraph number for general example

commit 3982d5d5758df949e3c2e0174c72758189be6f2e
Author: Alisdair Meredith <alisdairm@me.com>
Date:   Mon Oct 14 08:54:22 2024 -0400

    [except.ctor] Retitle subclause as 'stack unwinding' (#7282)

    The purpose of this subclause is to define stack unwinding,
    which in specified in terms of the lifetime of objects, not
    just class types.  Hence, while much of the text is addressing
    interactions with contructors and destructors (the original
    subclause title) it does more than just that.

commit 4eb30d3d618ef44ae3925a1a62090bbbbfe8cabf
Author: Alisdair Meredith <alisdairm@me.com>
Date:   Wed Oct 16 07:39:15 2024 -0400

    [cpp.subst] change "proprocessing file" to "translation unit" (#7293)

    The term 'preprocessing translation unit' is defined in [lex.separate]
    while the term 'preprocessing file' is never defined, and is
    not used anywhere else in the standard.  Prefer to use the
    specified term, as it reasonably covers this case.

commit 40228c690cb8d2ac27bd54bdddeabe425bd022b2
Author: Alisdair Meredith <alisdairm@me.com>
Date:   Wed Oct 16 07:40:20 2024 -0400

    [cpp.import] Change "directive" to "definition" in "active macro directive" (#7292)

    The term 'active macro directive' is defined in p6, but never used.
    Meanwhile, there are multiple uses of 'active macro definition' but
    that term is never defined, including in the very sentence following
    the definition of the unused term, and in other clauses that
    cross-reference to this clause for their definition.

commit 47da0e8b88bf1aa20aa474edf04a6d29e70b7563
Author: Anders Schau Knatten <anders@knatten.org>
Date:   Wed Oct 16 13:41:26 2024 +0200

    [over.oper.general] Change "basic type" to "fundamental type" (#7287)

    The term "basic type" is used twice in this note but it's never defined anywhere, nor used.

commit 7fe7519a5af674cd914344c650529f743fd92fc2
Author: Alisdair Meredith <alisdairm@me.com>
Date:   Tue Oct 1 22:13:53 2024 -0400

    [except.handle] Remove confusing comparison to variadic functions

    The analogy that the ellipsis in an exception handler was similar to an
    ellipsis in a function declaration may have made sense at one time, but
    the comparison with a syntax using a macro based API calling 'va_arg'
    to access its contents --- something that is not possible for an
    exception handler --- seems more confusing than helpful today.

commit d225f51f8cb799fb014cb73beb7dcccc044392cc
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Tue Aug 20 11:58:24 2024 +0100

    [text.encoding.aliases] Add note about what isn't required

    Make it explicit that `copyable` is intended, rather than `semiregular`,
    and that the return types of `begin()` and `end()` can differ.

    Also remove a FIXME comment for something that doesn't need fixing.
    These requirements on a type are specified in our usual form, it would
    be wrong to use _Remarks_: or _Requires_: here.

commit 6338d95ae620f5e4d37d27a39a40f9de9af37b77
Author: Alisdair Meredith <alisdairm@me.com>
Date:   Wed Oct 16 08:47:02 2024 -0400

    [lex.charset] Introduce parent subclause [lex.char] for character sets and UCNs (#7067)

    The grammar for universal-character-name is oddly sandwiched into the
    middle of the subclause talking about the different character sets used
    by the standard.  To improve the flow, extract that grammar into its own
    subclause.

    In the extraction, I make three other clarifying changes.  First, describe
    this new subclause as 'a way to name any element of the of the translation
    character set using just the basic character set' rather than simply
    'a way to name other characters'. Then, merge the sentence on where universal
    characters are prohibited into the new intro sentence describing universal
    characters, to make clear that there is no contradiction between nominating
    a character, and how that character can be used. Finally, remove the 'one of'
    in the grammar where there is only one option to choose.

commit 9b6b757f34bf4a1eeb6a66481a444b83f1ee5770
Author: Matthias Kretz <m.kretz@gsi.de>
Date:   Thu Sep 12 21:41:02 2024 +0200

    [sf.cmath.assoc.laguerre,sf.cmath.assoc.legendre] Add reference to eq

    The associated Laguerre/Legendre functions build on the
    Laguerre/Legendre functions, which are defined in different equations.
    Point to them from the associated functions.

    Also use the correct \ell as used in the formula.

commit 0456a32e41772b0a68b4055fb4e6533cb64e0e3d
Author: Yihe Li <winmikedows@hotmail.com>
Date:   Thu Sep 5 23:59:58 2024 +0800

    [utility.syn, flat.map.defn] Remove all [[nodiscard]] from library wording

commit 8b2c7fc3c58bd109c82a016ee2cc5b691bdcd853
Author: Eisenwave <me@eisenwave.net>
Date:   Mon Jun 10 23:22:04 2024 +0200

    [expr.new] Extend example for new-expressions with zero size arrays

commit fb34daf31b53389cc35b3f5f65a69785fc6dd1de
Author: Alisdair Meredith <alisdairm@me.com>
Date:   Tue Jul 23 22:32:52 2024 -0400

    [char.traits] Better cross-reference several headers

commit 220cb742e8056ad033ad8dce5630d7d3acaa4c7d
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Oct 16 15:37:39 2024 +0100

    [debugging] Move [debugging] to the end of Clause [diagnostics]

    Part of the C++26 clause restructuring (#5315).

commit 7a2dafa6b4cca842e264bfd544b69452fb448c39
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Oct 16 15:43:39 2024 +0100

    [execpol] Move [execpol] to the end of subclause [algorithms.parallel]

    Part of the C++26 clause restructuring (#5315).

commit 93e2e1c6bcf5e9c3e551d964978e8bf241c392a4
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Oct 16 15:52:54 2024 +0100

    [type.index] Move [type.index] into subclause [support.rtti]

    The subclause is integrated into the structure of [support.rtti],
    meaning that the synopsis becomes a sibling of the rest, and the
    subdivisions of the remaining text are removed (in analogy with
    [type.info]).

    Part of the C++26 clause restructuring (#5315).

commit cdb120a4aee270f4e6e40dd7b07885c70651224e
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Oct 16 17:25:51 2024 +0100

    [containers] Move synopses right in front of the classes they define

    Part of the C++26 clause restructuring (#5315).

commit b7e389c9feca4839f77ad60985f509e01f96a399
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Oct 16 15:27:06 2024 +0100

    [std] Reorder clauses: [algorithm], [strings]

    Part of the C++26 clause restructuring (#5315).

commit 5512050c2db44d87566d25ce4f70b530624cb330
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Oct 16 15:36:47 2024 +0100

    [std] Create new top-level Clause [text], following [strings]

    Part of the C++26 clause restructuring (#5315).

commit fc6f670832980fc7b8219cb6945592cbe45d9239
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Oct 16 19:01:21 2024 +0100

    [text, re] Move [re] into [text]

    Part of the C++26 clause restructuring (#5315).

commit 5d106373aada591874ab5e38301502b3012e0502
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Oct 16 19:06:03 2024 +0100

    [text, localization] Move [localization] into [text]

    The subclause [text.encodings] is extracted and elevated to a sibling
    subclause of [localization].

    Part of the C++26 clause restructuring (#5315).

commit 804846a56f7e73dafe4ebd621fa81097d2e94603
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Oct 16 20:15:42 2024 +0100

    [charconv, format] Move [charconv], [format] to [text]

    Part of the C++26 clause restructuring (#5315).

commit 4b1a9a76c29c31cc3f679a8bdb1603842baf3501
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Oct 16 20:31:33 2024 +0100

    [text, c.strings] Move text-related parts of [c.strings] to [text]

    The text-related subclauses [cctype.syn], [cwctype.syn], [cwchar.syn],
    [cuchar.syn], and [c.mb.wcs] are moved to a new subclause [text.c.strings].

    Part of the C++26 clause restructuring (#5226, #5315).

commit 8003b627a7e336c2e9f350a3bb1ad395ec7c1cc7
Author: lprv <100177227+lprv@users.noreply.github.com>
Date:   Wed Oct 16 19:41:35 2024 +0000

    [expr, temp.arg.nontype] Use 'pointer to' instead of 'address of' (#6174)

    Specifically, in:
     * [expr.prim.lambda.closure]p8, p11
     * [expr.const]p13.3
     * [temp.arg.nontype]p3

commit 198e991fed47efcd8b7fe1ad98ecde4d8722a201
Author: Alisdair Meredith <alisdairm@me.com>
Date:   Wed Oct 2 15:55:49 2024 -0400

    [except.handle] group all paragraphs on searching for handler

    This commit moves all of the paragraphs involved in the search for a
    handler for an exception into a single logical sequence.

    After this change, [except.spec] deals only with specifying the
    'noexcept' function decorator and its interaction with the
    'noexcept' operator, and contains no text regarding exceptions
    themselves.  It might be appropriate to move that subclause into
    the [dcl] structure at a future date.