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.
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.
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.
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.
transform_view::iterator's difference is overconstrained
drop_view's const begin should additionally require
jthreadconstructors require that the parameters be move-constructible but never move construct the parameters
join_viewsis broken because of CTAD
counted_iteratoris missing preconditions
boolcan't be an integer-like type
F < E
convertible_to's description mishandles cv-qualified
sentinel<false>not comparable with their
sentinel<false>not comparable with
indirectly_readable_traitsambiguity for types with both
__cpp_lib_polymorphic_allocatoris in the wrong header
ios_basenever reclaims memory for
single_view's in place constructor should be explicit
operator<=>(const shared_ptr<T>&, nullptr_t)definition ill-formed
operator<=>(const unique_ptr<T, D>&, nullptr_t)can't get no satisfaction
condition_variable_anyfails to constrain its
elements_view::end()have incompatible constraints
common_view'sconverting constructor is bad, too
subrange's conversions from
ranges::advanceviolates its preconditions
std::allocatormakes the standard library treat derived types as always equal
node_handleprivate members missing "exposition only" comment
drop_viewhave different constraints
std::tuple<>should be trivially constructible
monotonic_buffer_resourcegrowth policy is unclear
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++
maybe-const. Subsequently, all uses of
using Base = conditional_t<Const, const V, V>;have been replaced by
using Base = maybe-const<Const, V>;throughout the document.
true" were added to expressions in preconditions, according to our conventions.
true" to expressions in preconditions.
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 <firstname.lastname@example.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 <email@example.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 <firstname.lastname@example.org> 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 <email@example.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 <firstname.lastname@example.org> 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 <email@example.com> Date: Sat Nov 14 08:43:03 2020 -0600 [thread.sharedtimedmutex.requirements.general] Fix typo commit a888cfb1ed98cf50be397e0614cc5130762227c0 Author: Thomas Köppe <firstname.lastname@example.org> 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 <email@example.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 <firstname.lastname@example.org> Date: Mon Nov 23 18:28:21 2020 +0000 [std] Add "implemented" to hyphenation rules commit 431818492f83ca3c3a188906ad562ec24d9aa664 Author: Thomas Köppe <email@example.com> Date: Wed Nov 25 11:56:48 2020 +0000 Replace "could" and "might", Clauses 1-15. (#4384) commit b2df3252873f18f272fcc6e72649312a19c8b5ad Author: Thomas Köppe <firstname.lastname@example.org> Date: Wed Nov 25 11:58:22 2020 +0000 Replace "could" and "might", Clauses 16-32. (#4386) commit 6bf61cfdabec7b1c7c0076c9aacc1ebcabd02b05 Author: Thomas Köppe <email@example.com> Date: Wed Nov 25 21:54:34 2020 +0000 Replace "could" and "might" in Annexes. (#4390) commit 2432acacbce559ac6cd3e2878ff68e3b917484ec Author: Thomas Köppe <firstname.lastname@example.org> Date: Mon Dec 14 12:36:20 2020 +0000 [basic.lookup.unqual] Fix placement of cross reference commit 15987c3025f9b87121f20b4706e6fafe00c1bd74 Author: Dawn Perchik <email@example.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 <firstname.lastname@example.org> 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 <email@example.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 <firstname.lastname@example.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 <email@example.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 <firstname.lastname@example.org> 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 <email@example.com> 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 <firstname.lastname@example.org> 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.