Richard Smith (editor) (Google Inc)
Thomas Köppe (co-editor) (Google DeepMind)
Jens Maurer (co-editor)
Dawn Perchik (co-editor) (Bright Side Computing, LLC)
Special thanks to Marshall Clow for supplying the LaTeX sources for
and to Gor Nishanov for supplying a pull request for P0912R5 (CWG motion 15, 22 pages of wording changes).
Thanks to all those who have submitted editorial issues and to those who have provided pull requests with fixes.
N4811 is a prior version of this Editors' Report, and is hereby rescinded and replaced by this version. Thanks to Akira Takahashi for identifying errors in some hyperlink destinations in that document; the hyperlinks in this version of the Editors' Report have been corrected.
CWG motion 1: Core issue resolutions for 14 issues in "ready" status applied, 1 not applied:
[[maybe_unused]]and structured bindings
CWG motion 2: Core issue resolutions for 22 issues in "tentatively ready" status applied, resolving 24 issues:
constexprin friend declaration
tuple_sizerequirements for structured binding
CWG motion 3: P1286R2 "Contra CWG DR1778" (DR)
CWG motion 4: P1091R3 "Extending structured bindings to be more like variable declarations"
CWG motion 5: P1381R1 "Reference capture of structured bindings"
CWG motion 6: P1041R4 "Make
char32_t string literals be UTF-16/32"
CWG motion 7: P1139R2 "Address wording issues related to ISO 10646"
CWG motion 8: P1323R2 "Contract postconditions and return type deduction"
CWG motion 9: P0960R3 "Allow initializing aggregates from a parenthesized list of values"
CWG motion 10: P1009R2 "Array size deduction in new-expressions" (DR)
CWG motion 11: P1103R3 "Modules"
CWG motion 12: P1185R2 "
CWG motions 13 and 14 apply to the Reflection TS
CWG motion 15: P0912R5 "Coroutines"
Core motions added a total of 24 pages (and 1 Clause) to Clause 1-15
LWG motion 1 applies to the Library Fundamentals TS
LWG motion 2: Library issue resolutions for 2 issues in Ready status and 11 issues in Tentatively Ready status applied:
atomicis unimplementable for non-
basic_string_view::starts_withEffects are incorrect
_backshould invalidate the end iterator
Containerconstructors need another constraint
filesystem_errorconstructors taking a
stringmay not be able to meet their postconditions
spandoes not have a
subrangeshould always model
Samecould be clearer
LWG motion 3: P0339R6 "
polymorphic_allocator<> as a vocabulary type"
LWG motion 4: P0340R3 "Making
LWG motion 5 was retracted
LWG motion 6: P0738R2 "I Stream, You Stream, We All Stream for
LWG motion 7: P1458R1 "Mandating the standard library: clause 16 - language support library"
LWG motion 8: P1459R1 "Mandating the standard library: clause 18 - diagnostics library"
LWG motion 9: P1462R1 "Mandating the standard library: clause 20 - strings library"
LWG motion 10: P1463R1 "Mandating the standard library: clause 21 - containers library"
LWG motion 11: P1464R1 "Mandating the standard library: clause 22 - iterators library"
LWG motion 12: P1164R1 "Make
create_directory() intuitive" (DR)
LWG motion 13: P0811R3 "Well-behaved interpolation for numbers and pointers"
LWG motion 14: P1001R2 "Target vectorization policies from Parallelism V2 TS"
LWG motion 15: P1227R2 "Signed
ssize() functions, unsigned
size() functions "
LWG motion 16: P1252R2 "Ranges design cleanup"
LWG motion 17: P1024R3 "Usability enhancements for
LWG motion 18: P0920R2 "Precalculated hash values in lookup"
LWG motion 19: P1357R1 "Traits for [un]bounded arrays"
Library motions added a total of 7 pages to Clause 16-32.
The edits for CWG2310 inadvertently required the base class to be complete instead of the derived class in one of the edits. After consultation with CWG, the derived class is now required to be complete in all cases.
The edits for CWG2331 were intended to be an editorial cleanup and wording simplification, but were found to have unintentional normative effect. This issue is being returned to CWG for redrafting.
The edits for CWG2332 added a note that was not entirely accurate. The note, along with the normative text that it references, have been rephrased to clarify that an injected-class-name is never interpreted as a template-name in a context in which class template argument deduction would apply (even though it can be interpreted as a template-name in some cases in a context where a decl-specifier might be parsed, such as in a template-argument).
The wording moved for CWG2020 inadvertently omitted some edits that were part of the wording reviewed by CWG. Those edits were not substantive, and have been restored editorially.
Removed redundant restatement of the
operator== symmetry rule in defaulted
operator!=; looking for reversed candidates and rewriting
== expressions is
already handled by overload resolution, and a reversed
operator== can never
be selected anyway because the two arguments are of the same type.
Likewise the corresponding redundant wording was removed from the rules for
>= that inaccurately claimed they
could select a reversed
Modernized the wording to follow current editorial conventions, and simplified where possible.
Fixed a contradiction between the core and library wording; the library wording
coroutine_handle<> to resume any coroutine, but the core wording
did not account for that possibility and only permitted resumption via a
coroutine_handle<P> with the right promise type
Replaced the references to CopyConstructible and CopyAssignable with the intended Cpp17CopyConstructible and Cpp17CopyAssignable after consultation with LWG.
Several section labels introduced by the motions papers have been modified to match our style guide. In addition to the section labels affected by the above motions, all section labels containing underscores have been renamed to instead use periods.
In N4791 (the post-San-Diego working draft), an editorial change was applied
to repair missing wording in 2018-11 CWG motion 14
This change added a definition of the term "usable in constant expressions"
as applied to objects and references that was inadvertently dropped from the
wording during CWG review.
Further review within CWG has shown that the dropped wording is also incorrect, so the editorial fix has been reverted (leaving the definition absent rather than incorrect), and a proper definition will be inserted by a core issue.
A log of editorial fixes made to the working draft since N4800 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 142acf0bbde8d6fd20cb67c051d896fec33a84b6 Author: stryku <email@example.com> Date: Thu Oct 11 18:41:18 2018 +0200 [decl.init]/10 Fix specified initialization. According to [basic.start.static]/2, for objects with static storage duration, zero initialization performs only if constant initialization does not. [decl.init]/10 can be generalized to static initialization. This is an editorial note change. commit 74def77454a15b6cdb45be0f31916396b4b63b72 Author: Richard Smith <firstname.lastname@example.org> Date: Fri Mar 15 13:45:06 2019 -0700 [util.smartptr.atomic.shared] [util.smartptr.atomic.weak] Clarify grouping of "either". commit 4c5701a79cc7c4cc7b9cd9c6070e3cd88961aca7 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Fri Dec 21 21:04:43 2018 +0100 [mismatch] LWG3178 std::mismatch is missing an upper bound commit 04a5e31a02e19e5d1c9e9a0b05c40ce8730c7064 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Sat Jan 26 00:30:13 2019 +0100 [algorithms] Qualify declarator-id with sub-namespace. Also qualify return types where appropriate. commit 6c844190a533950fc0100eac4da7785d99c87400 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Fri Mar 15 20:25:59 2019 +0100 [time.clock.req] Change 'satisfy' to 'meet'. commit c3adaef44b94cc63a8a8806f398185046461947c Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Fri Mar 15 19:23:30 2019 +0100 [numeric.requirements] Define 'numeric type'. commit 1ce86a62a3cff9fb2bcf6c1a2c37168e023e338b Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Sat Mar 9 22:18:26 2019 +0100 [time.clock.req] Simplify requirements for Cpp17TrivialClock. commit 0ba5424c1beddfd8c8403ce882b96dee0f530c7f Author: JF Bastien <email@example.com> Date: Fri Mar 15 13:52:39 2019 -0700 [basic.fundamental] Rename 'range exponent' to 'width' to align with C commit 9e00558f2a824421406a6703d1232cc4fb89bb15 Author: Arthur O'Dwyer <firstname.lastname@example.org> Date: Fri Mar 15 16:43:16 2019 -0400 [std] Fix a bunch of faulty parallelism with "either". commit 54ddcb970132bfe026c9d9d62d967632b56ae303 Author: BRevzin <email@example.com> Date: Fri Mar 15 15:30:07 2019 -0500 [class.rel] Simplifying wording to avoid talking about a reversed <=>. We can never select a reversed <=> here because the operands are of the same type. commit 5d174b05d8cd08717ed7efc05d0271409651071c Author: Richard Smith <firstname.lastname@example.org> Date: Fri Mar 15 12:33:42 2019 -0700 [expr.prim.lambda.capture] Convert paragraphs repeating the "non-odr-usable local entities shall not be odr-used" rule from [basic.def.odr] into notes. commit 41853024e5e6fcd5feb496f64767d2888d76154f Author: Richard Smith <email@example.com> Date: Fri Mar 15 11:38:57 2019 -0700 Revert "[expr.const] Add missing definition of 'usable in constant expressions'" The prior editorial fix was an attempt to re-add wording that was missing from P0595R2 (moved as 2018-11 CWG Motion 14). However, CWG analysis has indicated that the editorial fix is incomplete, so we're reverting it to restore the wording to the as-moved state. This reverts commit e58439bce8af85e6569328272c2cfb73f5fc44d6. commit 154f2c59c4377897937f4b0722cfe2b6d726cc59 Author: birbacher <firstname.lastname@example.org> Date: Fri Mar 15 18:39:16 2019 +0000 [container.node] Add 3 "template" keywords for dependent name (#2676) On: [container.node.overview]/4 [container.node.cons]/3.1 [container.node.dtor]/1 commit 2585d7f5894b46e0aa2f961183060a5201b2cca7 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Fri Dec 21 19:29:38 2018 +0100 [std] Replace underscores in stable labels with periods. commit 554a8926404bd5e0f772a6cb72c04bd12a5b7984 Author: Casey Carter <Casey@Carter.net> Date: Mon Mar 4 09:29:50 2019 -0800 [specialized.algorithms] Rename voidify's parameter `ptr` is an odd name for a parameter that is a reference to storage for an object. commit a2dfa61a0d50a24e7be6cbc004bb0f076b8c62b5 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Fri Mar 8 22:25:38 2019 +0100 [queue.syn,stack.syn] Add partial specialization of uses_allocator commit 721f2d606f90cc20a16ad9b4383bc78cb368abdc Author: Jonathan Wakely <email@example.com> Date: Fri Mar 15 02:53:18 2019 +0000 [func.not_fn], [func.bind_front] fix phrasing of \mandates and \expects (#2750) The Mandates: element should just state its condition, and not say "shall". Cpp17 concept requirements should be phrased as "X meets the Y requirements" not "X shall meet the requirements of Y". commit 48484c967ee5f3ecb65ff857f8f4794e108ba0cb Author: Krystian <firstname.lastname@example.org> Date: Thu Mar 14 22:49:33 2019 -0400 [temp.class.spec.mfunc] Correct "class template specialization" to the intended "class template partial specialization" commit 3117814eaf800a5e1dd387f4c5a0522f2627689e Author: languagelawyer <email@example.com> Date: Fri Mar 15 05:48:28 2019 +0300 [expr.sizeof] Remove the redundant paragraph 3 Paragraph 1 already says that functions are disallowed and function pointers are allowed. commit c769f835dadd4a35df9febad684a296d6cb71a53 Author: JF Bastien <firstname.lastname@example.org> Date: Thu Mar 14 19:45:53 2019 -0700 [dcl.attr.contract.cond] Replace return type with 'void' in example that does not return Also remove the (unused) name for the return value in the postcondition. commit d48c79e223cfbd5ec134703e20989235208e9364 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Fri Mar 8 01:14:16 2019 +0100 [dcl.enum] Fix singular/plural mismatch. commit c5fb73ba6a9b71f6e247103ab4baac1c9f72e210 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Fri Mar 8 01:13:35 2019 +0100 [conv.prom] b_min and b_max are no longer defined in [dcl.enum] commit d7d2580c7d8fabe25ada4dd0e091f9997c0916f5 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Sat Mar 9 22:36:47 2019 +0100 [range.iota,range.adaptors] Add cross-references for private member types. commit b8fd249c737ff2c3652cf6ef77db25712038d353 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Sun Mar 10 20:20:10 2019 +0100 [dcl.init] Prepend 'Otherwise' to a bullet commit dd227824ade24ab51dd4cc926c4b9e87cc29becf Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Sun Mar 10 20:28:41 2019 +0100 [dcl.attr.contract.cond] References cannot be modified. Avoid confusion caused by using the words "makes [...] modifications of the value of [a] parameter" by excluding references. commit b0116b87bf33fed9648e6e8b1b0c7cee0d90b311 Author: Jason Merrill <email@example.com> Date: Tue Mar 12 09:06:23 2019 -0400 [over.match.best] Add number for paragraph 2. commit f0f7ba234644d3690d18fcba73f618648014a47c Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Wed Mar 13 22:21:42 2019 +0100 [lib] Use '(inclusive)', not other punctuation to indicate inclusive ranges in prose. commit 5ba461ec9836f95ed7a54b563b06d480f564e987 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Wed Mar 13 22:46:19 2019 +0100 [class.eq,class.spaceship] Clarify order of comparison. commit 42e5df5c08c9ef805da304fe05fe387cfc3d33d5 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Thu Mar 14 00:02:25 2019 +0100 [basic.lookup.argdep] Reorder bullets to group semantics. commit 927dc13e1010e031692f3a94d8e9599beeb877ac Author: Richard Smith <firstname.lastname@example.org> Date: Thu Mar 14 17:22:07 2019 -0700 [array.tuple] Fix broken description of tuple_element for std::array. commit 0b06fcd5f92bc0439a868471a5fdfdba8a181941 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Fri Mar 8 22:12:14 2019 +0100 [ranges.syn] Add ref_view to header synopsis. commit 6f6e5772b2a2dcf41e3db4f68b6cbc3c0628c061 Author: Richard Smith <email@example.com> Date: Thu Mar 14 16:05:33 2019 -0700 [algorithms.parallel.exec] Rephrase to avoid incorrect use of "may not". Convert rationale sentence to a note. commit de76c7de8c4f9734e0e4351d2088d4786ee62135 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Tue Mar 5 21:57:10 2019 +0100 [char.traits.typedefs] Change 'shall meet' to 'meets' commit e11e27a7873953f0c078901f7ddbb0d7d701c5f7 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Wed Mar 6 21:15:37 2019 +0100 [mem.poly.allocator.mem] Avoid duplicate colons. commit 2956ba37186d7e9cbe728cc3870a2a26fb1f0168 Author: Richard Smith <firstname.lastname@example.org> Date: Wed Mar 13 14:14:43 2019 -0700 [dcl.fct.def.coroutine] Update wording to align with current editorial conventions. Reorder and rearrange to reduce the number of variables with long scopes that we define in the wording. Fix mismatch between core and library wording where library permits coroutine_handle<void> to resume a coroutine with any promise type, and the core language does not. commit 8dd4539b24473677809163f5e6d399ba6aa0b27d Author: Richard Smith <email@example.com> Date: Tue Mar 12 18:15:59 2019 -0700 [expr.await] Rephrase and modernize wording. Invoke temporary materialization conversion directly rather than handwaving about a temporary object. Specify that the o expression is evaluated. Bulletize description of the three different ways that await-suspend is called. Fix wording that uses values and objects on the left-hand side of a class member access to instead consistently use expressions. Fixes #2774. commit d69814f61077f7e549ccc39a21fc3b90db4223d6 Author: Richard Smith <firstname.lastname@example.org> Date: Mon Mar 11 20:12:17 2019 -0700 [temp.param] "a type that is literal" -> "a literal type". commit c0058816fdfe079095ca8717ad692dc2d498d6a3 Author: Richard Smith <email@example.com> Date: Mon Mar 11 20:11:46 2019 -0700 [class.eq] Remove redundant repetition of the operator== symmetry rule. commit 007c0c1a619417f94c2c4efb57be71c09f2c2870 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Wed Mar 6 21:32:09 2019 +0100 [temp.type] Do not refer to operator==, which excludes built-in ==. commit caa5c8aedecdf68cfda4f5d95ec9d20451953117 Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Tue Mar 5 19:05:25 2019 +0100 [class.compare.default] Add a note that friends are found by ADL only. commit c9074b533c835bbf820f5ea09957810ed2c04dab Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Wed Mar 6 20:56:58 2019 +0100 [expr.new] Move treatment of arrays of unknown bound commit ce2f08ab94123adb44e58f1176c6ae4f3209eb60 Author: Richard Smith <firstname.lastname@example.org> Date: Mon Mar 11 17:20:25 2019 -0700 [dcl.init] Merge new direct aggregate init wording into class direct initialization bullet to avoid the wording being unreachable due to an "Otherwise" chain. commit 691b7c10530d3265afbf445dff3dd129c7c5692e Author: Dawn Perchik <email@example.com> Date: Sun Mar 10 16:15:53 2019 -0700 [dcl.init] Moved the changed bullet in 17.5 to before 17.6.3. commit 5f7461d24bc0e9867458a043adf04aa8c4ceed73 Author: Richard Smith <firstname.lastname@example.org> Date: Fri Mar 8 16:11:34 2019 -0800 [temp.dep.type] Rephrase to avoid suggesting that an expression can be the current instantiation. A type can't be the current instantiation either, but that's a pre-existing prevalent problem. commit cbb21fb0210b6aade5591de94e3a27d7059e9d06 Author: Richard Smith <email@example.com> Date: Fri Mar 8 16:08:02 2019 -0800 [basic.def.odr] Apply additional edits from CWG review that were not transcribed into P1359R0. commit ac732bfe4eef01e9e2443dac6138270695d7cbf9 Author: Richard Smith <firstname.lastname@example.org> Date: Fri Mar 8 12:24:49 2019 -0800 [expr.prim.lambda.capture] Add missing close parentheses in CWG2358 examples. Fixes #2680. commit 502e419ca75c9656394d1998036b4b810e8bdb17 Author: Richard Smith <email@example.com> Date: Fri Mar 8 12:00:26 2019 -0800 [dcl.type.simple] Fix inaccurate note added by CWG2332 [temp.local] Clarify that the surrounding syntax and construct directly dictates whether an injected-class-name is syntactically a template-name or a type-name, not just what it means. commit f4346ece403e469e800d635a75baafb9c411aa1b Author: Richard Smith <firstname.lastname@example.org> Date: Fri Mar 8 11:39:36 2019 -0800 [expr.static.cast] Fix wording of CWG2310 to match CWG intent (verified on core reflector): - in p11, require D to be a complete class type, not B - in p12, rephrase to avoid the suggestion that we're talking about a different D than the one already in scope commit 6f34b0513ed6d974b86a27429f8f4d02a6c18b88 Author: Hana Dusíková <email@example.com> Date: Fri Feb 22 11:03:29 2019 -1000 [pair.astuple, tuple.helper] Fix inconsistent class key in tuple_size/tuple_element. (#2679) It was declared as a struct and specializations were classes. commit 102a791b446f70f939a9b1e2e66fc3553aade19c Author: Johel Ernesto Guerrero Peña <firstname.lastname@example.org> Date: Fri Feb 22 02:30:23 2019 -0400 [array.syn] Add reference to [array.tuple] commit 7fe655909b4e5f01d8a8b71d6b508785c42c739e Author: Richard Smith <email@example.com> Date: Wed Feb 20 17:04:55 2019 -1000 [temp.dep] [temp.dep.res] Remove redundant restatement of the two-phase lookup rule. The primary location of the rule is [temp.dep.candidate]. commit 8fbeb52ae5daccc0352798ff023f6cba6aebcd42 Author: Richard Smith <firstname.lastname@example.org> Date: Mon Feb 18 17:15:39 2019 -1000 [basic.link] The notion of the linkage of a type is no longer used for any purpose. Remove it and move its example next to the rule that justifies it, and simplify said example. commit cafdbd8036f3cf19e9cfc2f56584b219fb190602 Author: languagelawyer <email@example.com> Date: Fri Jan 25 00:12:44 2019 +0300 [expr.sizeof]/2: there are no expressions of reference type commit 35ce0ae2eb2582dbc00fc824afbfa1d53a64de8d Author: Richard Smith <firstname.lastname@example.org> Date: Wed Feb 13 17:51:58 2019 -0800 [depr.array.comp] Fix example of deprecated array comparison commit 2f0bd979f41953890129fcbdc6ef37e3e90387ad Author: Alisdair Meredith <email@example.com> Date: Sun Feb 10 16:53:15 2019 -0500 Add missing noexcept cross-refs for invokable traits (#2662) All the other traits that use the phrase 'is known not to throw exceptions' also cross-reference the core clause for the noexcept operator, so add the missing cross reference to the more recently added traits. commit 9f261368736c3666791329145292c1563a291861 Author: Alberto Barbati <firstname.lastname@example.org> Date: Sun Feb 10 22:52:36 2019 +0100 [temp.mem.func] Fixed text in example, which was not updated by CWG 249 (#2658) commit f668df034ebf27ad53b5addad22af4f1293f829f Author: Jens Maurer <Jens.Maurer@gmx.net> Date: Sun Feb 10 22:50:42 2019 +0100 [algorithms.general,concepts.general] Add missing entries for summary tables (#2663)