N4879 Editors’ Report:
Programming Languages — C++

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


Many thanks to Casey Carter, Davis Herring, and Jonathan Wakely for checking the correctness of several editorial changes.

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

New papers

Wide-ranging editorial changes to modal verbs

Recall that during the DIS review for C++20, ISO had already requested that we fix inappropriate use of the modal verbs "shall", "may", "can", "must", "should", "might", and "could", according to the ISO drafting directives. Many of those changes had been made for the C++20 document and had also been applied to the C++23 working draft.

However, during the final stages of publication of C++20, ISO pointed out further inappropriate uses of specifically "could" and "might". Previously we had removed those verbs from normative text, but ISO clarified that they also must not appear in notes. We have reviewed the use of these modal verbs comprehensively and applied editorial changes wherever we found them to improve the overall quality of the text:

Many further occurrences of "could" and "might" remain in the text, where we did not see an obvious solution. We plan on describing ISO's policy in a separate paper, for the attention of the committee, so as to help future papers to avoid the banned constructions. We also plan to liaise with the wording groups, either informally or via papers, to resolve the remaining occurrences.

Motions incorporated into working draft

Core working group polls

CWG poll 1: Core issue resolutions for "Tentatively Ready" issues in P2238R0 applied: (DR)

CWG poll 2: P0330R8 Literal Suffix for (signed) size_t.

CWG poll 3: P2096R2 Generalized wording for partial specializations.

CWG poll 4: P2029R4 Numeric and universal character escapes in character and string literals.

CWG poll 5: P1787R6 Declarations and where to find them.

Library working group polls

LWG poll 1 applies to the Library Fundamentals TS.

LWG poll 2 applies to the Networking TS.

LWG poll 3: Library issue resolutions for "Ready" and "Tentatively Ready" issues in P2236R0, except for issues 3413 and 3443, applied. Note that Issue 3265 is subsumed by Issue 3435, and is therefore missing from the following list.

LWG poll 4: P1679R3 string contains function.

LWG poll 5: P0881R7 A proposal to add stacktrace library.

LWG poll 6: P2227R0 Update normative reference to POSIX.

LWG poll 7: P1048R1 A proposal for a type trait to detect scoped enumerations.

LWG poll 8: P0943R6 Support C atomics in C++

Editorial fixes

Changes to motions

Minor editorial changes

A log of editorial fixes made to the working draft since N4868 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 b5ba91f2d1753716cc20154ce06e9d274d75e4ff
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Mon Oct 19 14:43:24 2020 +0100

    README: Add splitindex and imakeidx to list of packages for Fedora

commit b5b2f60824f09f9a619c389b47808be4d58febdc
Author: Stephan T. Lavavej <stl@microsoft.com>
Date:   Tue Oct 20 19:24:50 2020 -0700

    [thread.stoptoken.intro] Fix typo

commit 94b872a1305256080739c2bf468d78fe86a9b556
Author: Casey Carter <Casey@Carter.net>
Date:   Mon Oct 26 11:29:00 2020 -0700

    [ranges] Add missing "is true"s to \expects

commit ae06f3ec62117bfc3a875e7c6b63cf8cecc24e51
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Oct 26 14:59:09 2020 -0700

    [everywhere] Replace "might" and "could" with "can" when expressing "an
    ability of the user of the document or [...] a possibility open to
    him/her" (quoting the ISO Drafting Directives, Part 2).

    As insisted upon by ISO/CS.

commit fa67415507f1abae67c5929f76ce3d6fcad94a1b
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Oct 6 19:22:28 2020 +0200

    [stmt.ranged] Align font for begin-expr and end-expr.

    Those are placeholders for expressions.

commit b5806999b50e5cd0e07bbb618b7c782138d14498
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Oct 29 23:09:59 2020 +0100

    [std] Harmonize phrasing 'terminate is invoked' (#4005)

    instead of saying 'is called'.
    Also add cross-references to [except.terminate].
    Also use 'exits via an exception' consistently.

commit cc74b25ebec38ee9aa6a13433699c600a1375fc1
Author: Stephan T. Lavavej <stl@microsoft.com>
Date:   Fri Oct 30 03:59:08 2020 -0700

    [stringbuf.assign] Fix typo ("s" => "rhs"). (#4306)

    The parameter of swap is "rhs"; there is no "s" here. (This appears to have been
    copy-pasted from [string.swap] where the parameter is named "s".)

commit 517e2e6233ed4e33509066136d03514d1bb04560
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Nov 2 12:44:55 2020 +0100

    [ptr.launder] Fix font for object meta-variable 'X'. (#4311)

commit 4376ecc4ce4e045fc7af6696c24cd80b40538a09
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Oct 30 23:51:48 2020 +0100

    [re] Remove library names from general index.

commit f8a79909f491924a2d1f9e44ea579634f195ff36
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Oct 31 23:38:51 2020 +0100

    [rand] Remove library names from general index.

commit 0a1ce7e47e97f50b3b7240819e97c7830acfe81b
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Oct 31 23:40:00 2020 +0100

    [macros] Remove library headers from general index.

commit 8131f4c4d295ca1132f8cabd3537d8cb6ad2c578
Author: Akira Takahashi <faithandbrave@gmail.com>
Date:   Fri Nov 6 05:34:47 2020 +0900

    [time.cal.ymwd.members] Fix object name in year_month_weekday constructor (#4304)

commit 6c12819b6a5bd270bfb901726f73d4d147d16a5a
Author: Casey Carter <Casey@Carter.net>
Date:   Tue Nov 10 14:22:05 2020 -0800

    [stringbuf.cons] Insert missing space after comma (#4335)

    This is the common library style.

commit 69b41bbbc2436d9f1b4176b14883e945757fed0c
Author: timsong-cpp <rs2740@gmail.com>
Date:   Sat Nov 14 08:43:03 2020 -0600

    [thread.sharedtimedmutex.requirements.general] Fix typo

commit a888cfb1ed98cf50be397e0614cc5130762227c0
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Nov 17 01:05:53 2020 +0000

    Revert "[everywhere] Replace "might" and "could" ...".

    This reverts commit ae06f3ec62117bfc3a875e7c6b63cf8cecc24e51.

    We will make these changes in a more careful series of smaller commits.

commit c890f0eeb26b70a3f6ec943f814c4b934ff687ba
Author: timsong-cpp <rs2740@gmail.com>
Date:   Wed Nov 18 10:15:25 2020 -0600

    [iterators.common] fix typo and add "is true" to Preconditions: clauses (#4382)

commit f124033f68060252988e469a3cdd661571a0b387
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Mon Nov 23 18:28:21 2020 +0000

    [std] Add "implemented" to hyphenation rules

commit 431818492f83ca3c3a188906ad562ec24d9aa664
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Nov 25 11:56:48 2020 +0000

    Replace "could" and "might", Clauses 1-15. (#4384)

commit b2df3252873f18f272fcc6e72649312a19c8b5ad
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Nov 25 11:58:22 2020 +0000

    Replace "could" and "might", Clauses 16-32. (#4386)

commit 6bf61cfdabec7b1c7c0076c9aacc1ebcabd02b05
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Nov 25 21:54:34 2020 +0000

    Replace "could" and "might" in Annexes. (#4390)

commit 2432acacbce559ac6cd3e2878ff68e3b917484ec
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Mon Dec 14 12:36:20 2020 +0000

    [basic.lookup.unqual] Fix placement of cross reference

commit 15987c3025f9b87121f20b4706e6fafe00c1bd74
Author: Dawn Perchik <dawn@brightsidecomputing.com>
Date:   Thu Nov 19 03:44:50 2020 -0800

    [ranges] Change "using Parent" declarations to use "maybe-const" after LWG3448

commit f73990eb8a63aa2444103a4b7334d8bdd401962f
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Dec 4 16:31:43 2020 +0100

    [iterator.requirements.general] Fix indexing around 'valid range'.

commit 9da9ebf4842358b8aa5212376a637807f097c272
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Dec 6 21:40:26 2020 +0100

    [atomics.syn] Move macro definitions to the global namespace.

commit 09bdfbde0049fec454b2ec8ccce3622c7e991999
Author: Jason Cobb <jason.e.cobb@gmail.com>
Date:   Mon Dec 14 08:17:55 2020 -0500

    [expr.type.conv] Remove indirection of "specified type" (#4397)

    The resulting type is always unqualified void, and the indirection is unnecessary.

commit d8707dd332b1eb4c2abd1adf9679665a419abeb5
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Dec 14 17:28:48 2020 +0100

    [diff.cpp03.temp] 'export' was resurrected for modules. (#4316)

commit 70ae569a8bc9c016fef9f03abf26e5fb4e18b12e
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Dec 14 17:29:37 2020 +0100

    [except.spec] Excise undefined term 'instantiation directive'. (#4312)

commit e0b3fe1abde8b34b5e5fc6371a10ca6fec41f063
Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
Date:   Mon Dec 14 12:33:08 2020 -0400

    [util.smartptr.weak] Remove redundant declaration of 'swap' (#4037)

    The declaration of the non-member function is already present in the header synopsis [memory.syn] and does not need to be repeated in the class synopsis. We generally don't do this for any other free 'swap' function, either.

commit 29022b485c8ff69a36cd70912b6802d3f341723c
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Mon Dec 14 16:46:09 2020 +0000

    [time.cal.year.nonmembers] Avoid narrowing conversion (#4184)

    The years::rep type could be a signed integer wider than int.

commit 2adf4ac572bf8e90f8e6bcab295e977ccdf6e2f0
Author: MattStephanson <68978048+MattStephanson@users.noreply.github.com>
Date:   Mon Dec 14 09:34:17 2020 -0800

     [time.clock.gps.members] Fix misspelled return type. (#4318)

    The returns specification for `gps_clock::to_utc` says `gps_time` instead of `utc_time`, probably a copy-paste typo from p3. The original proposal, P0355R7, also says `gps_time`, but the intent seems obvious, and the status quo doesn't compile.

commit c422198deca08a63374a0834880c2e10ca63f8fd
Author: Alisdair Meredith <alisdairm@me.com>
Date:   Wed Mar 25 11:48:56 2020 +0000

    [expr.sub] Make deprecation of commas in brackets normative.

    Core language deprecations are stated in core wording, and then
    cross-referenced from Annex D. All current references to deprecating
    this feature are notes, hence there is no normative deprecation.

    This change promotes a note to non-note, normative text.

commit 3b4b8d3f896aff977d8d8c438dea799f82b9c460
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Dec 14 18:57:37 2020 +0100

    Move punctuation to before the footnote mark. (#4402)

    Also add a programmatic check to catch ill-placed footnote marks in the future.

commit 305443c9d521d26f4b0fcd5d0e6e36fd998d131b
Author: Christopher Di Bella <cjdb.ns@gmail.com>
Date:   Mon Dec 16 10:42:17 2019 +0000

    [range.istream] Rename expos-only member 'object_' to 'value_'.

    The latter name is used everywhere else, the former was only used in
    the four instances renamed by this change.

commit d8ef9845fe9dcf950f397704714574d983e0a1f4
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Nov 3 22:39:28 2020 +0100

    [thread.req.timing] Capitalize sentences in bullets.

commit 69e0382cbdf03671ae5cc384f0f85d0694de1531
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Nov 3 22:39:53 2020 +0100

    [class.access.general] Fix list item punctuation.

commit 4eb65b35e986a9b3911c5ab03b142ecadd555d87
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Dec 14 22:23:27 2020 +0100

    [stmt.return] Remove unhelpful example. (#4309)

    Also split subsequent text up into two new numbered paragraphs.

commit 93c32455b5c8449f39d69e60773a923f593575f7
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Dec 14 22:12:41 2020 +0100

    [dcl.constexpr] Remove use of 'identifier label'.

    The definition of the term was removed by
    P1787R6 Declarations and where to find them.

commit dfb01cdf6c902a811c5fe523e2f6caa53f16e94d
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Tue Nov 10 20:51:52 2020 +0000

    [syncstream.syncbuf.cons] Remove bogus rdbuf() calls

    You don't call rdbuf() to get to the streambuf, this type is the streambuf.

commit 06630ddedd7fb7fa101d1c36188328ff0b54f5e6
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Oct 30 15:04:18 2020 +0100

    [class.access.base] Clarify 'direct member' for access checks.

commit 9f894e73d4ae8eeff6a2eedc48ac7877047b9f30
Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
Date:   Tue Dec 15 12:26:53 2020 -0400

    [func.wrap.func] Remove redundant declarations of swap and op== (#4411)

    The declarations of the non-member functions swap and operator==
    are already present in the header synopsis [functional.syn] and do not
    need to be repeated in the class synopsis.