N4982 Editors’ Report:
Programming Languages — C++

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

Motions incorporated into working draft

Notes on motions

All motions were applied cleanly.

Core working group polls

CWG Poll 1. Accept as Defect Reports and apply the proposed resolutions of all issues in P3196R0 (Core Language Working Group "ready" Issues for the March, 2024 meeting) to the C++ Working Paper.

CWG Poll 2. Apply the changes in P2748R5 (Disallow Binding a Returned Glvalue to a Temporary) to the C++ Working Paper.

CWG Poll 3. Accept as a Defect Report and apply the changes in P3106R1 (Clarifying rules for brace elision in aggregate initialization) to the C++ Working Paper, resolving core issue 2149.

CWG Poll 4. Apply the changes in P0609R3 (Attributes for Structured Bindings) to the C++ Working Paper.

CWG Poll 5. Accept as a Defect Report and apply the changes in P3034R1 (Module Declarations Shouldn’t be Macros) to the C++ Working Paper.

CWG Poll 6. Accept as a Defect Report and apply the changes in P2809R3 (Trivial infinite loops are not Undefined Behavior) to the C++ Working Paper.

CWG Poll 7. Apply the changes in P2795R5 (Erroneous behaviour for uninitialized reads) to the C++ Working Paper.

CWG Poll 9. Apply the changes in P2573R2 (= delete("should have a reason");) to the C++ Working Paper.

CWG Poll 10. Apply the changes in P2893R3 (Variadic friends) to the C++ Working Paper.

CWG Poll 8 was withdrawn.

Library working group polls

LWG Poll 1: Apply the changes for all Ready and Tentatively Ready issues in P3180R0 (C++ Standard Library Ready Issues to be moved in Tokyo, Mar. 2024) to the C++ working paper.

LWG Poll 2: Apply the changes in P2875R4 (Undeprecate polymorphic_allocator::destroy for C++26) to the C++ working paper.

LWG Poll 3: Apply the changes in P2867R2 (Remove Deprecated strstreams From C++26) to the C++ working paper.

LWG Poll 4: Apply the changes in P2869R4 (Remove Deprecated shared_ptr Atomic Access APIs from C++26) to the C++ working paper.

LWG Poll 5: Apply the changes in P2872R3 (Remove wstring_convert From C++26) to the C++ working paper.

LWG Poll 6: Accept as a Defect Report and apply the changes in P3107R5 (Permit an efficient implementation of std::print) to the C++ working paper.

LWG Poll 7: Apply the changes in P3142R0 (Printing Blank Lines with println) to the C++ working paper.

LWG Poll 8: Apply the changes in P2845R8 (Formatting of std::filesystem::path) to the C++ working paper.

LWG Poll 9: Apply the changes in P0493R5 (Atomic minimum/maximum) to the C++ working paper.

LWG Poll 10: Apply the changes in P2542R8 (views::concat) to the C++ working paper.

LWG Poll 11: Apply the changes in P2591R5 (Concatenation of strings and string views) to the C++ working paper.

LWG Poll 12: Apply the changes in P2248R8 (Enabling list-initialization for algorithms) to the C++ working paper.

LWG Poll 13: Apply the changes in P2810R4 (is_debugger_present is_replaceable) to the C++ working paper.

LWG Poll 14: Apply the changes in P1068R11 (Vector API for random number generation) to the C++ working paper.

LWG Poll 16: Apply the changes in P2944R3 (Comparisons for reference_wrapper) to the C++ working paper.

LWG Poll 17: Apply the changes in P2642R6 (Padded mdspan layouts) to the C++ working paper.

LWG Poll 18: Apply the changes in P3029R1 (Better mdspan's CTAD) to the C++ working paper.

LWG Poll 15 was withdrawn.

Editorial changes

Major editorial changes

There have not been any major editorial changes since the last working draft.

Minor editorial changes

A log of editorial fixes made to the working draft since N4971 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 08649a5a81ba91d8597c263b99dc80ed71767940
Author: Jan Schultke <me@eisenwave.net>
Date:   Fri Dec 22 11:33:39 2023 +0100

    [stmt.expr] Use \grammarterm for expression (#6469)

commit acb68797051c9a6a5f51e4adb5091b376f1ba13a
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Mon Jan 1 16:23:56 2024 +0100

    [basic.life] Fix indentation in example (#6727)

commit f6692f25130834672ba5a212f739100669abbbe8
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Tue Jan 2 20:21:54 2024 +0100

    [basic.scope.pdecl,basic.types.general] Remove extra whitespace (#6756)

commit 7ddcd43c96589fc13342ac4cee549da75360fde7
Author: Alisdair Meredith <alisdairm@me.com>
Date:   Fri Jan 5 15:41:01 2024 -0500

    [basic.scope.param] Add missing \grammarterm for requires-expression (#6759)

commit 29c0e4882a1ae62e7cd5f8d3fabcb22ae6153219
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Dec 18 17:22:30 2023 +0100

    [std] Remove problematic 'requires' phrases from notes.

    Only specific phrases involving the word "required" are problematic,
    namely when they appear to establish a normative requirement. They
    have been reworded, often by replacing "is required" with "needs",
    sometimes with slightly larger edits.

commit 43fc5a16147e720568b68ecae77f12fa3fb15102
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Fri Jan 5 15:32:55 2024 +0000

    [std] Reword "necessary", "permitted", "allowed", "may" in notes.

    This is so that notes do not (inappropriately) state requirements or
    permissions.

commit 74433025763f83bbccfb001dab8aa084647ffb2f
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Thu Jan 11 19:11:17 2024 +0100

    [basic.def] Fix punctuation (#6766)

commit b67e0b70e88abf65d9b49875133c68d55744b1de
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Fri Jan 12 12:53:10 2024 +0000

    [text.encoding.overview] Use same parameter names as detailed description (#6768)

commit bc5a56b6e9cadd030d48066601fc8098382c7469
Author: Casey Carter <Casey@Carter.net>
Date:   Mon Jan 15 11:19:13 2024 -0800

    [exception] Paragraph two is no longer universally true

    We recently added `bad_expected_access<void>` to the Standard Library, which derives from `exception`, but does not have "the following publicly accessible member functions, each of them having a non-throwing exception specification." For clarity, we should point out that this provision is not universal.

commit 2055c2feabee6ec9df24ea07f8451ad33618be45
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Tue Jan 16 09:20:44 2024 +0100

    [zombie.names] Remove superfluous period (#6774)

commit 8410aac1b84ec161b6990441acde53185f958135
Author: Daniel Krügler <daniel.kruegler@gmail.com>
Date:   Sun Jan 21 22:39:02 2024 +0100

    [tuple.helper] Paragraph 1 not universally true (#6777)

    [tuple.helper] p1 defines a general requirement that all specializations of `tuple_size`
    shall meet the *Cpp17UnaryTypeTrait* requirements, but p4 actually defines a
    special situation where this requirement is not met ("Otherwise, it has no member value").
    We have the same seemingly contradiction in [depr.tuple] p2. For clarity, we should
    point out that this provision is not universal.

commit 4fe9190fa05c4fb4e83c1a1ba68aa12aa49542e9
Author: S. B. Tam <cpplearner@outlook.com>
Date:   Sat Jan 27 14:38:55 2024 +0800

    [locale.ctype.members] Add missing parameter name

commit 74f5f61cac56a4eca5389a51754fe7e60e6b7449
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Sat Jan 27 11:26:37 2024 +0000

    [tuple.cnstr] Do not use code font for cardinal number 1 (#6785)

commit cb8ff12806b67990665100baaacb9a16040bce8c
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Sat Jan 27 17:11:23 2024 +0100

    [container.alloc.reqmts] End note with period (#6787)

commit 70b99af0dfcb9cae82bcd97c7b24a2e84edfb2cd
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Sat Jan 27 18:03:16 2024 +0100

    [class.mem.general,class.mfct.non.static] End note with period (#6778)

commit db80a4612af561e8473fd8fb3724ae9db2c72578
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Mon Feb 5 15:51:03 2024 +0000

    [rand.dist.samp.plinear] Fix copy & paste error in Mandates (#6794)

    This error was present in the incoming P1719R2 paper (Mandating the
    Standard Library: Clause 26 - Numerics Library), but is obviously bogus.
    There is no UnaryOperation type in that constructor. The correct
    requirement is taken from the corresponding constructor in
    [rand.dist.samp.pconst].

commit e51d5733b1bd1531d6e3b63617d12414a56678c0
Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
Date:   Wed Feb 7 10:37:06 2024 -0500

    [temp.res.general] Grammatical parallelism: remove a stray "a" (#6796)

commit 8238252bcec14f76e97133db32721beaec5c749b
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Thu Feb 8 06:59:10 2024 +0100

    [iterator.concept.winc] Fix typo (#6800)

commit 19caa61068d3f3aa2453e1ba7256536b8464c25c
Author: A. Jiang <de34@live.cn>
Date:   Thu Dec 28 10:07:15 2023 +0800

    [mem.res.private] Say `*this` instead of improper  `this`

commit 419190062806ae257e5efe7057551fd626bd9516
Author: A. Jiang <de34@live.cn>
Date:   Thu Dec 28 10:08:04 2023 +0800

    [mem.res.monotonic.buffer.mem] Say `*this` instead of improper `this`

commit 6ecda0b20664fc6b8450157e1cd9f0580c32e5e1
Author: A. Jiang <de34@live.cn>
Date:   Thu Dec 28 10:09:08 2023 +0800

    [re.traits] Say `*this` instead of improper `this`

commit 9305893dfd250d876edf4555cf96c665e2e71e75
Author: Casey Carter <Casey@Carter.net>
Date:   Thu Feb 15 13:16:33 2024 -0800

    [thread.once.callonce] INVOKE is evaluated, not called (#6810)

commit 3616a40ded794e94181a5405672b1c36f7774684
Author: Jan Schultke <me@eisenwave.net>
Date:   Wed Feb 21 19:05:13 2024 +0100

    [temp.pre] Add comma after introductory clause (#6814)

commit 30debb0c5d5dc42fa36864aac76b82f49319ad84
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Feb 21 21:39:56 2024 +0100

    [temp.constr.order] Move index entry to correct paragraph (#6812)

commit fb0277664fd53efea93d95202784f78aea610f31
Author: Jan Schultke <me@eisenwave.net>
Date:   Thu Feb 22 20:28:15 2024 +0100

    [semaphore.syn] Add binary_semaphore to index (#6781)

commit 090840673ee58d3c1e8d2844d3c716ee5ce245bc
Author: Jan Schultke <me@eisenwave.net>
Date:   Thu Feb 22 20:31:19 2024 +0100

    [format.parse.ctx] Improve readability of paragraphs 12 and 14 (#6815)

commit a5825b1905b06d730a46e64fb5b379f48cbc6e51
Author: Jan Schultke <me@eisenwave.net>
Date:   Thu Feb 22 20:33:18 2024 +0100

    [format.parse.ctx] Add comma (#6817)

commit 8c8e05d7ff6cda6329ca898e7a270547a85675d7
Author: Jan Schultke <me@eisenwave.net>
Date:   Thu Feb 22 20:35:21 2024 +0100

    [format.parse.ctx] Move non-normative explanations of errors into notes (#6816)

commit 48f90026631638c91b3d8138bed49cd0450380c7
Author: Eisenwave <me@eisenwave.net>
Date:   Wed Feb 28 10:23:51 2024 +0100

    [stmt.while] Add comma after introductory phrase

commit d5ad3794937429b1410071037af9ddfb0aa8c861
Author: Eisenwave <me@eisenwave.net>
Date:   Wed Feb 28 10:24:26 2024 +0100

    [stmt.do] Add comma after introductory phrase

commit 78ecd23f22f00be4bffaf806a6747417ce2150a2
Author: Jan Schultke <me@eisenwave.net>
Date:   Wed Feb 28 18:06:26 2024 +0100

    [stmt.jump] Add cross-reference to [stmt.dcl] for destruction of local variables (#6829)

commit 66b6b97c8f3969f96e3ca8df1180c18b1c57af8c
Author: Jan Schultke <me@eisenwave.net>
Date:   Wed Feb 28 21:50:50 2024 +0100

    [expr.dynamic.cast] Add comma after conditional clause (#6830)

commit 23430d7e605d62f5a4a1769611e3c415d6510b65
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Fri Mar 1 11:06:34 2024 +0100

    [bibliography] Replace HTTP link with HTTPS link (#6831)

commit 20c2851a3c8f480a017cef6602b1b6a4d32bc5e4
Author: Eisenwave <me@eisenwave.net>
Date:   Fri Mar 1 16:03:04 2024 +0100

    [time.parse] Hyphenate argument-dependent lookup

commit e0287d17110f86e3724bda5ebe74de249508490f
Author: Eisenwave <me@eisenwave.net>
Date:   Fri Mar 1 16:04:02 2024 +0100

    [diff.cpp17.temp] Hyphenate argument-dependent lookup

commit ceff4ea83b511be01a8e1756386ce6a2e06e323c
Author: Jan Schultke <me@eisenwave.net>
Date:   Fri Mar 1 18:06:00 2024 +0100

    [headers] Strike incorrect quote of subclause heading (#6832)

commit 9878cfbea12b517d32c5af1bbfa7c8b8c4ff9cab
Author: Jan Schultke <me@eisenwave.net>
Date:   Sun Mar 3 08:42:45 2024 +0100

    [handler.functions] Add cross-reference to [intro.races] (#6845)

commit 9ec133c8e51aae98297255563250a2f6656e4636
Author: lprv <100177227+lprv@users.noreply.github.com>
Date:   Tue Mar 19 15:36:51 2024 +0000

    [time.hash] Fix spelling of 'Cpp17Hash'

commit 2b7cd6e8be2bc8a9ae97da9bf03ae4efa7fe1a9c
Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
Date:   Tue Apr 16 20:03:29 2024 +0800

    [expos.only.entity] Add/fix \expos for exposition-only names (#6924)

commit aa21c812f629975d5d25d4639053482f346751a8
Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
Date:   Tue Apr 16 08:07:44 2024 -0400

    [dcl.type.elab] Move note to separate paragraph

    Also clarify that the next paragraph is talking about any elaborated-type-specifier at all, not just the ones in p4.

commit 397384c90e3ead9f832a3a269335fbfe53328180
Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
Date:   Fri Feb 16 06:51:03 2024 +0100

    [rand.adapt.ibits,rand.dist.pois.poisson] Add namespace std in class template

    [rand.adapt.ibits] 28.5.5.3-4
    [rand.dist.pois.poisson] 28.5.9.4.1-1

commit fbf3d76683d269a0a5313fb69b5aa483ddd3a18a
Author: Jan Schultke <me@eisenwave.net>
Date:   Thu Feb 22 21:41:42 2024 +0100

    [expr.unary.op] remove redundant value category wording

commit 498cd7720bb2e53fb323144f956e67900a054e34
Author: Daniel Krügler <daniel.kruegler@gmail.com>
Date:   Sun Feb 4 17:57:38 2024 +0100

    [iterator.requirements.general] Clarify that "constexpr iterator" is a requirement to be met

    [iterator.requirements.general] p16 says "Iterators are called _constexpr iterators_ [..]", but all referencing sections say "meet the constexpr iterator requirements". For clarity, we should reword the definition to make it clear that this is a named requirement.

commit 89cd1467f354a2b9b05ac57ad1f90f483aab22b9
Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
Date:   Sun Jan 28 13:54:17 2024 +0800

    [range.drop.overview] Remove redundant \iref for subrange

    ..which already existed in the previous bullet.

commit bee055de1c5e23ce0b301138998633dc64169b4a
Author: A. Jiang <de34@live.cn>
Date:   Thu Nov 23 09:33:39 2023 +0800

    [dcl.init.ref] Change "function lvalue" to "lvalue of function type"

commit ce31d424ba6753be1c87a4cf3face42f89b9e010
Author: A. Jiang <de34@live.cn>
Date:   Thu Nov 23 09:36:28 2023 +0800

    [over.ics.ref] Simplify wording by not using "function lvalue"

commit 2a07c133732dcc7ea57aeb32612b15b50837a4df
Author: A. Jiang <de34@live.cn>
Date:   Thu Nov 23 09:38:41 2023 +0800

    [over.ics.rank] Change "function lvalue" to "lvalue of function type"

commit 7675c4c1abf1986241e8a20463fd71f2841d3c39
Author: Eisenwave <me@eisenwave.net>
Date:   Fri Sep 1 10:27:25 2023 +0200

    [res.on.exception.handling] use grammarterm instead of informal term and add ref