N4836 Editors' Report -- Programming Languages -- C++

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


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

Fixed application of P1643R1 (2019-07 LWG Motion 9): two added paragraphs should have been labeled Effects: instead of Expects:.

Fixed application of P1463R1 (2019-03 LWG Motion 10): an added != in [list.ops] has been replaced with the correct ==.

Notable editorial changes

Improved indices

Changes to section labels

Several "Preamble" sections were added to avoid hanging paragraphs.

Feature test macros

An explicit synopsis for the <version> header has been added. This synopsis describes the complete set of library feature test macros and replaces the prior use of a table for this purpose. For wording papers, we will continue to accept instructions of the form "Add a feature test macro __cpp_lib_blah with a suitable value"; explicit lists of edits to [version.syn] are also acceptable.

Minor editorial fixes

A log of editorial fixes made to the working draft since N4830 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 4fe8325ff6cf63055f9d064ba1b4f24614863649
Author: S. B. Tam <cpplearner@outlook.com>
Date:   Tue Aug 20 05:14:29 2019 +0800

    [thread.jthread.class] fix typos (#3183)

commit aaea74e8dcfa456043ec315511463fb6d4a80108
Author: David Olsen <dolsen@nvidia.com>
Date:   Mon Aug 19 14:17:33 2019 -0700

    [atomics.ref.operations] Change Expects to Effects for atomic_ref::notify_{one,all} (#3180)

    Fix an editorial issue that resulted from an incorrect merge.  In the
    description of atomic_ref::notify_one and atomic_ref::notify_all in
    [atomics.ref.operations] p25 and p27, N4830 has "Expects" in both of
    those paragraphs.  But the paper that was merged in, P1643R1
    ( http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1643r1.html )
    has "Effects".  "Effects" is correct, and it matches notify_one and
    notify_all in the four other atomics-related classes.

commit 538f7c69f1423551628fdc638e8c4654bf1c7662
Author: Eelis <github.com@contacts.eelis.net>
Date:   Mon Aug 19 23:20:53 2019 +0200

    [std] Add/fix periods at end of sentences. (#3177)

commit 600f1c0d1e94b0b6198c99516a95ec5ba439237a
Author: Eelis <github.com@contacts.eelis.net>
Date:   Mon Aug 19 23:22:26 2019 +0200

    [std] Use consistent punctuation to terminate non-final list items. (#3175)

commit fc240342df42f090563ed09c991c01925f1f4f27
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Aug 19 23:31:56 2019 +0200

    [tuple.elem] Canonicalize comments in example. (#3161)

commit 221f1062d929688811aaa96c9752b54443ba29db
Author: Dan Raviv <dan.raviv@gmail.com>
Date:   Fri Aug 23 10:00:40 2019 +0300

    [lex.key,diff.header.iso646.h] Consistent tokens order (#3190)

    Order the alternative tokens in [diff.header.iso646.h] in the same way
    they are ordered in Table 6 in [lex.key].

commit 92f599b75123280d0ef17f00a1717f0ca89a19f8
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Aug 24 22:20:56 2019 +0200

    [basic.def] Move rule on template definition here

    from its original location in [temp] p3.

commit ee7b223aad941219d583b4a6cbf058abb740d63f
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Tue Sep 3 14:50:19 2019 +0100

    [span.syn] Fix inconsistent class key in tuple_size/tuple_element (#3211)

commit fad5d71d46953f73d50e4629671dc83022f53d38
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Tue Sep 3 14:53:56 2019 +0100

    [span.tuple] Simplify definition of get(span<T, I>) (#3210)

commit c241ddeeb2fb2d4b9930ecc0fd84f12249953e12
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Sep 3 14:06:55 2019 -0700

    [diff.cpp17] Add 'constinit' to one more list of new keywords in C++20.

commit ab2ae01387d493148693ee5ae63e032eae3b0bb4
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Sep 14 00:25:48 2019 +0200

    [basic.stc.dynamic.safety] Avoid undefined term 'dynamic object'. (#3225)

commit a9f6cedab5ea58cd74f809086accc2a7779a078c
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Sep 14 00:40:05 2019 +0200

    [temp.param] Define X in the example. (#3226)

commit df69a5194d0903a8a2a574aeffd4a486d98d7122
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Sep 14 21:32:26 2019 +0200

    [basic.stc.dynamic.safety] Fix ambiguous antecedent for 'it'. (#3228)

commit af85c4c882efc554a99cf46cc0044b23ef7da322
Author: onihusube <44743040+onihusube@users.noreply.github.com>
Date:   Thu Sep 19 03:21:35 2019 +0900

    [class.spaceship] Fix weak_ordering::equal to equivalent (#3220)

commit e02bdecfb150dbd9f1086912317024d1c9d06cd7
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Wed Sep 18 19:24:06 2019 +0100

    [concepts.arithmetic] Fix notes that use undefined terms (#3223)

    The terms "signed integral types" and "unsigned integral types" are not
    defined in [basic.fundamental]. The notes are trying to talk about
    signed/unsigned *integer* types. char and bool are not signed or
    unsigned *integer* types, but they certainly are *integral* types, and
    so they model one of signed_integral or unsigned_integral.

commit 8fdd7d4307f1ea0ecf1af00503142f46e23bd15f
Author: Casey Carter <Casey@Carter.net>
Date:   Mon Sep 23 22:39:44 2019 -0700

    [ostream.iterator] Correct typo (#3240)

commit 7fc9efbdda5a7ff77dc28ea81f56f9479e471869
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Oct 1 12:23:55 2019 +0200

    [meta] Harmonize ordering in descriptions. (#3166)

commit 338edc433819e6d4fc7237f29ff372d223eda150
Author: mordante <zar-rpg@xs4all.nl>
Date:   Tue Oct 1 12:37:11 2019 +0200

    [re.regex] Rename template parameters for "assign". (#3198)

    basic_regex::assign uses template parameters `class string_traits' and
    `class A' while similar places use `class ST' and `class SA'.

commit 7f45b9e37b02c9f75b9d401ae77560468bd2df5c
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Oct 1 13:20:08 2019 +0100

    [list.ops] Fix misapplication of P1463R1, "!=" should be "==". (#3258)

    Misapplication in 019baa941945c1c8529fcaa0288ed5e98944f7a4.

    Also restore the edit "." -> ", and".

commit d2cc230ad3795f6b367bfa60e6b2bac5a7644f69
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Oct 2 18:17:31 2019 +0200

    [lib] Remove parameter names from deleted special member functions. (#3259)

commit 17d48e05aed86d965f33efc75d73addf04e7d436
Author: Casey Carter <cartec69@gmail.com>
Date:   Fri Oct 4 01:13:07 2019 -0700

    [span.iterators] Fix typo in paragraph 5 (#3276)

    "Returns: Equivalent To:" is not a library wording form, but an obvious misspelling of "Effects: Equivalent to:".

commit 311f57196dc94eebcba61799401fd20bebb27c62
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Oct 4 19:20:57 2019 +0200

    [concept.boolean] Avoid undefined phrase 'Boolean context'. (#3269)

commit 8a13bc1a109a0b0672120da3fabec360bd6823ed
Author: 江添亮 <boostcpp@gmail.com>
Date:   Sun Oct 6 12:18:14 2019 +0900

    [rand] Use 1.0, not 1, as a literal of floating-point type

commit 63427e429d11e40a9f2796459ff31b379354f7e1
Author: frederick-vs-ja <de34@live.cn>
Date:   Sat Jun 15 10:54:36 2019 +0800

    [move.sent.ops] Add missing description of move_sentinel::base

    Or add a section like `\rSec3[move.sent.ops.conv]{Conversion}` ?

commit ecbe188a5fd7d889a602180c656bddc6a125149e
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Aug 8 00:14:33 2019 +0200

    [std] Harmonize cross-references for explicit casts.

commit 3cd1ef2343a3aa705c97157186abbfda890835bf
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Aug 8 21:37:49 2019 +0200

    [tuple] Make descriptions of non-members siblings of [tuple.tuple].

commit ed20772b95de38a927d17ec6c5afaed51cec5d39
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Aug 8 21:53:52 2019 +0200

    [thread.jthread.class] Rephrase introductory sentence.

commit 997aa48537482815b4a1098e84496778a80884c2
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Aug 9 21:34:57 2019 +0200

    [std] Hyphenate floating-point and avoid 'floating'.

commit d11e53e3ac075e72d373a92a4975d2ed55298fc3
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Aug 10 09:18:30 2019 +0200

    [std] Rename 'floating literal' to 'floating-point literal'.

commit 4455bf4c5694d1fc09eaf68a75c370666467962a
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Aug 20 22:04:30 2019 +0200

    [temp.names] Remove misleading note.

commit 37cc5affe2c52a3dde21ca38e3aa70afc756db9b
Author: Dan Raviv <dan.raviv@gmail.com>
Date:   Wed Aug 21 23:27:19 2019 +0300

    [diff.library] Consistency for wide char types

    [diff.char16] says `char16_t` and `char_32t`
    > ...do not appear as *macro* names...

    [diff.wchar.t] says `wchar_t`
    > ...does not appear as a *type* name...

commit 97977a1d742340d2198910912df3c511b8154afa
Author: Dan Raviv <dan.raviv@gmail.com>
Date:   Wed Aug 21 23:25:49 2019 +0300

    [intro.compliance] Fix reference in footnote

    It seems this footnote is supposed to point at [intro.abstract] which describes how the implementation's documentations also defines implementation-defined behavior; In the same way that the footnote in [intro.abstract] points into [intro.compliance] where it says that the documentation also includes things which are listed there.

commit 94cf6f3a6408929088c546661094009ae921a725
Author: Roger Orr <rogero@howzatt.demon.co.uk>
Date:   Sat Aug 24 19:36:51 2019 +0100

    [temp.param] Remove unused class template from example.

commit 089b47bf447d5ef199380053d08b3c99734cd41c
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Sep 4 00:15:56 2019 +0200

    [lex.pptoken] Mention import keywords in the category list.

commit 34cc4a7ce6155e75d1b5df0e9cea6d1e46cf790e
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Sep 4 00:21:08 2019 +0200

    [class.dtor] Group declaration properties vs. behavior.

commit eaf23727c160e22a47f54419d5a66abfd672cc50
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Sep 5 21:22:41 2019 +0200

    [thread.latch] Subordinate [latch.syn] and [thread.latch.class]

commit 901b742c1caf74deab046599264e7d5c9862eb55
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Sep 14 00:43:55 2019 +0200

    [dcl.spec.auto] Add example to show variable redeclaration with 'auto'.

    CWG2389 Agreement of deduced and explicitly-specified variable types

commit 219506555b1a943a94db546a5d68745e1a7de242
Author: mordante <koraq@xs4all.nl>
Date:   Sun Oct 6 07:06:26 2019 +0200

    [re.regex] Use consistent names for function parameters

commit e2c85a91953b0bd672960d0cf662c85ba1ba7470
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Sep 24 21:19:51 2019 +0200

    [locale] Fix example.

commit 081375e2d152beea2c246119bd2b2c6fa42d0954
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Sep 24 21:35:07 2019 +0200

    [class.temporary] Fix typo in example.

commit 37ca3fadf39edb7e6453515e386e6e6c7ae46d1e
Author: Jason Cobb <jason.e.cobb@gmail.com>
Date:   Tue Sep 24 21:30:00 2019 -0400

    [expr.prim.id] Fix immediate function id-expression requirement

    Move possibilities into a list, and add "only" after "appear".

    Reason for being editorial: not intent to require all programs
    to use an "id-expression that denotes an immediate function",
    and moving the possiblities into a list does not change the meaning.

commit 2845d903cb36f7567fcda36746cac95fc43f147a
Author: Daveed Vandevoorde <daveed@vandevoorde.com>
Date:   Wed Sep 25 11:43:19 2019 -0400

    Avoid confusion between lookup and overall overload resolution

commit e71fce40a3eded0d9ff573eb41b9b1e33ce3d883
Author: Krystian Stasiowski <sdkrystian@gmail.com>
Date:   Sun Oct 6 01:21:02 2019 -0400

    [temp.alias] Change type-id to defining-type-id in the running text

     to match the portion of the grammar that it's referring to.

commit b04e94bba0c7998920bd09c6cc462ccda93efaa4
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Sep 27 09:42:25 2019 +0200

    [std] Introduce 'Preamble' sections to avoid hanging paragraphs.

commit c3b2c86e5e218ee6e80bd170eae653a6ad0d4047
Author: frederick-vs-ja <de34@live.cn>
Date:   Sun Oct 6 13:23:04 2019 +0800

    [class.copy.elision] Update example to match resolution of CWG 2278

commit 5fe6230c72e29a8595cc8f66ba149a560282ec3e
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Oct 3 00:07:58 2019 +0200

    [expr.typeid] Add note highlighting prohibition of bad function types.

    Function types that can only be used for member functions
    (because they have cv-qualifiers or a ref-qualifier)
    cannot appear as a typeid operand.

commit 599635d72caf3a9c768f5137f0bc19765ab4db2e
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Oct 3 09:39:14 2019 +0200

    [atomics] Reorder members of atomic, atomic_ref, atomic_flag

    for a more conventional and meaningful order.

commit ca09b84c8dcd0d7d0b15923a28b1be6692ccf37d
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Oct 3 15:01:05 2019 +0200

    [expr.const] Excise 'initialization full-expression'

    which is an undefined term. Instead, use 'full-expression
    of the initialization'.

commit d0a0da6bdb2ff02175d4c01bf60fb3274e37f5ee
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Oct 3 15:07:56 2019 +0200

    [atomics.ref.ops] Rename stable label from .operations

commit 97a85b438144ba083301ce234da27f028c5a7e97
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Oct 3 15:11:30 2019 +0200

    [basic.def.odr] Replace misleading 'for which' with 'where'.

commit 1327a34586617c26c48e615316f243b0ebf9d6d9
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Oct 3 15:25:33 2019 +0200

    [support.srcloc] Canonicalize presentation.

    - Avoid hanging paragraph.
    - Rename label [source_location.syn] to [source.location.syn].
    - Add automated check for clean labels.
    - Separate header synopsis from class synopsis.

commit 7724f6d359e72a981206c312c9d42903e988d1bd
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Oct 4 19:10:06 2019 +0200

    [class.mem] Avoid 'shall have been defined'

    when describing implicit definitions of defaulted
    special member functions.  Instead, use plain 'are'.

commit 8685db27c43a5b41c0682318c07a00906fe6c7d1
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Aug 15 10:25:22 2019 +0200

    [locale.numpunct,locale.moneypunct] Canonicalize local grammar presentation.

    In [locale.numpunct], rename the 'integer' non-terminal
    to 'intval', consistent with 'floatval'.
    Also remove the superfluous 'plusminus' non-terminal.

commit 03dd1b8abfe921d4e6b643cd109310c03801cbfb
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Sep 13 23:43:15 2019 +0200

    [over.match.funcs] Remove bullet for single-item bulleted list.

commit d0e718b6a514a22118367a815107281a9a24c805
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue May 28 22:33:54 2019 +0200

    [std] Consistently use 'immediately-declared constraint'.

    Harmonize the phrasing in [expr.prim.req.compound],
    [dcl.type.auto.deduct], [temp], and [temp.param].

commit 2c2b29248d04dc0ce3c22a74a9537c0582c36ee2
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Aug 8 22:06:21 2019 +0200

    [version.syn] Add synopsis for <version> header.

    This replaces the table of feature-test macros for the library.

commit e9fb3f03f05e48aa02d36ee42305f00bc056356b
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Oct 7 21:11:30 2019 +0200

    [rand.predef] Add digit separators to large numbers.

commit 7edac42a3b64406242c0c71b62264e05eab7e1a3
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Oct 7 22:24:16 2019 +0200

    [intro.defs] Hyphenate parameter-type-list.

commit d8935d972ee4f07f4507eea55df209ab7b1a508d
Author: Sergey Zubkov <cubbi@cubbi.com>
Date:   Tue Oct 8 09:25:11 2019 -0400

    [expr.const] drop unused declaration from example