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

Richard Smith (editor) (Google Inc)
Dawn Perchik (co-editor) (Embarcadero Technologies Inc)
Thomas Köppe (co-editor) (Google DeepMind)


Special thanks to Jens Maurer for performing many of the editorial fixes since N4713.

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

This revision contains only editorial changes relative to N4727.

Notable editorial changes

Fixed misapplication of LWG issue 704

The application of LWG issue 704 introduced a reference to the "Allocator-aware container requirements" table in normative wording. Due to an editorial oversight after the insertion of earlier tables caused the table numbering to change, this reference was instead pointed at the "Container requirements" table, altering the normative interpretation of the words.

The intended normative impact of LWG issue 704 has been restored by repointing the reference to the correct table. However, we believe the wording still does not have the intended effect, and LWG issue 3059 has been opened to rectify this wording.

Index of grammar productions

The index of grammar productions now indexes both the point at which each grammar production is defined (in bold) and all references to the grammar production in the main text.

Thanks to Jens Maurer for providing the necessary edits and cleanups for this change.

Minor editorial fixes

A log of editorial fixes made to the working draft since N4727 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 858b48f15b2a05e7332634efbe7effc1aace407a
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Nov 16 19:13:15 2017 +0100

    [basic.def] 'class name declaration' is undefined.

commit 12f2ee068f9a7933c0b916ecdba6d90adc4c6708
Author: JF Bastien <github@jfbastien.com>
Date:   Wed Feb 7 14:50:37 2018 -0800

    [atomics.types.operations] Clarify compare_exchange note

    We now have explicit floating-point specializations for atomic. We had cmpxchg for them before, but people are now looking at increased usage and are confused about what the behavior is for `-0.` with `0.`, as well as NaNs. I propose clarifying the note to make this extra clear. This is a note and is therefore purely editorial, and would be a waste of SG1's time.

commit f39be10b4419ea86711b7de4e9fe67ad340dc489
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Nov 29 21:25:35 2017 +0100

    [filesystems] 'dot' and 'dot-dot' are not \grammarterms

commit 2ce8d327638e02de1009a687eb59825efed96438
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Nov 30 22:36:27 2017 +0100

    [over.best.ics] Adjust example for [over.match.list] case

commit 58e1d43a0971d0c9bf8d33c2feaf546e33a10f7d
Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
Date:   Wed Dec 6 01:03:21 2017 -0400

    [string.view.template] Add missing stable reference

commit c4b8bd47dd6d20ec653e388febaff44f510c5446
Author: Geoff Romer <gromer@google.com>
Date:   Fri Dec 8 11:02:50 2017 -0800

    Constant expressions can have "library UB"

commit e2db0305802e4974426741693e28a232d0bc22ef
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Dec 12 21:31:00 2017 +0100

    [temp.dep.type] Clarify that a simple-template-id denotes a type

commit 3431c062a2c76261f0fbb44b710a0775a568928b
Author: Agustin K-ballo Berge <k@fusionfenix.com>
Date:   Thu Dec 14 17:14:26 2017 -0300

    [refwrap] Fix wrong use of "shall"

commit 2cbbe1c63ff17ff6e566c4dfa11211a6b3455e6d
Author: Agustin K-ballo Berge <k@fusionfenix.com>
Date:   Thu Dec 14 17:17:32 2017 -0300

    [thread.thread.id] Fix wrong uses of "shall"

commit afa8c506f108c383826bf9962721d37d76ac4efb
Author: S. B. Tam <cpplearner@outlook.com>
Date:   Tue Feb 13 03:02:28 2018 +0800

    [basic.scope.class,basic.lookup.unqual] Use the term "default member initializer" (#1892)

commit 08c9d619ab28c79b51ef9ca4b6349436d4cf28c5
Author: S. B. Tam <cpplearner@outlook.com>
Date:   Sun Dec 31 04:08:11 2017 +0800

    [expr.const] Fix no longer correct comment

commit a1243f679098d3dd1e4e566873ae53c18a974e8c
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Wed Jan 3 10:26:16 2018 +0000

    [dcl.enum] use indefinite article before "fixed underlying type"

commit cde94b80a4f229f564a51b20ed4e133ba15ee481
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Jan 9 22:52:49 2018 +0100

    [namespace.udir] Ambiguous lookup results are covered in [basic.lookup]

    Relegate a duplicate normative statement in [namespace.udir]
    to a note and add a cross-reference to [basic.lookup].

commit 0ce8ae35424bc010661a33e3dcabde31faf603d1
Author: James Dennett <jdennett@google.com>
Date:   Tue Jan 30 10:50:05 2018 -0800

    Fix references to container requirements tables.

    LWG issue 704 ("MoveAssignable requirement for container value type
    overly strict") added a reference from [associative.reqmts] to what was
    at the time table 93 ("Allocator-aware container requirements").

    That table is now table 86, but the cross reference is now
    (incorrectly) to table 83 ("Container requirements").  It should still
    refer to the Allocator-ware container requirements table.  This patch
    changes it to do so, matching what the committee voted in (many years

commit efbeb9ed7471b550df9da7a305e745a21a2d9569
Author: S. B. Tam <cpplearner@outlook.com>
Date:   Sat Dec 9 02:47:23 2017 +0800

    [dcl.struct.bind] Clarify that structured bindings are entities (as contrast to names)

commit c90e151f98a97423df50d438d075544545132989
Author: Marshall Clow <marshall@idio.com>
Date:   Mon Jan 29 12:01:30 2018 -0800

    [array.members] Update the description for array::data to match that of vector::data (#1904)

commit 4dec2aca3412c8c7d674f07409f44584ab225173
Author: Casey Carter <Casey@Carter.net>
Date:   Mon Jan 29 11:54:35 2018 -0800

    [fs.rec.dir.itr.members] Grammar fixes. (#1903)

commit 616405fb021f33841280407e95a7a44e1183a719
Author: Eelis van der Weegen <eelis@eelis.net>
Date:   Sat Jan 20 04:19:32 2018 +0100

    [class.temporary, temp.inst, temp.dep, temp.res] Capitalize some sentences.

commit 560e5f5d5797de2d376eaae96bb586c833e9dda2
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Thu Jan 11 15:44:26 2018 -0800

    [dcl.init.ref] Remove an unnecessary level of bullet nesting.

commit b4d7e7406dfa7c59591743dca9b79f30fa8f15bd
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Thu Jan 11 21:56:03 2018 +0000

    [variant.visit] Rephrase specification of 'visit' to be more technically correct and precise

commit 487e870347a4c76c9b6dd664c4e5671e709c81d8
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jan 5 22:08:55 2018 +0100

    [basic.lookup] Clarify name lookup consistency

commit 66a540e5b586bf85befc9ed14e6e98e708d0b305
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Fri Jan 5 14:53:02 2018 +0000

    [algorithms] Uniformize spelling of "in the initializer list"

commit 8e93464548bfabaa4dd501e4031f7afb7a70da3e
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Fri Jan 5 14:49:07 2018 +0000

    [algorithms] Add missing full stops to inline Returns elements

commit 2da91dac56d2be7bed2c09cb7804d0fcc2d649ae
Author: Casey Carter <Casey@Carter.net>
Date:   Tue Jan 2 12:38:09 2018 -0800

    [variant.visit] qualify std::forward for consistency

commit 70bd5d816825351d5b4abd376847814e9c1a9d4d
Author: Alisdair Meredith <alisdairm@me.com>
Date:   Fri Dec 22 06:24:47 2017 -0500

    Use 'one of' formulation for binary-digit

    The grammar for literals consistently prefers using the 'one of' a set
    formulation for character sets, rather than listing each character as
    an option.  This holds for other parts of this grammar, even when the
    set of options is just two items, such as hexadecimal-prefix,
    unsigned-suffix, or long-suffix.

    As binary-digit is the odd one out, this simple update makes it
    consistent with the rest of the grammar specifications in this

commit 9c4f6823e057da4112563254bc766b465b55d06f
Author: Jonathan Wakely <github@kayari.org>
Date:   Tue Jan 2 17:40:32 2018 +0000

    [re.regex.construct] Add missing default argument to itemdecl (#1893)

commit f7bfd1766672c272509718f48eef2f5cf80725e9
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Jan 2 17:32:45 2018 +0000

    [basic.string] State class invariants about [data(), data() + size()] in the introduction. (#1879)

commit 0c0e0c3a740c133e1d25bfdbe141a3128d77a381
Author: timsong-cpp <rs2740@gmail.com>
Date:   Fri Dec 15 15:50:01 2017 -0500

    [atomics.types.memop] Add missing `\pnum`s (#1890)

commit bfcc4d844ac3758060c277e881b3aab7cf24743a
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Dec 6 22:01:32 2017 +0000

    [re.def] Clarify index entry for "sub-expression"

commit 3e715907193e3f5d47ff15470ef7a0496010e834
Author: Alisdair Meredith <public@alisdairm.net>
Date:   Wed Dec 6 06:42:55 2017 -0500

    [diff.mods.to.headers] Remove non-existent headers from the indexes (#1878)

    Three C11 headers are called out as not being part of C++.
    They should not be listed in the index of headers, which
    currently points to the two places that explicitly state
    these headers do not exist.

commit 83e302d3bb6a5f88554b1ec75e8aa51760458c5f
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Sun Dec 3 20:45:03 2017 +0000

    [string.cons] Replace postcondition tables by ordinary Postcondition elements

commit 2da6e6a2c191ee03785f4eea34380b49274ffd52
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Nov 30 13:57:14 2017 +0100

    [facet.num.put.virtuals] Fix definition and use of 'loc' (#1861)

commit 7945291d0b619765caf56ed746f173762c4824ee
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Nov 30 13:55:41 2017 +0100

    [charconv.to.chars, charconv.from.chars] Replace 'minus sign' with '-' (#1862)

commit 6c89881ad5ba8008a83d05232e316b9b5acbd08f
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Nov 30 13:55:15 2017 +0100

    [fs.path.decompose] 'root-path' is not a grammar non-terminal (#1864)

    Use the function call root_path() instead.

commit ce1a9d0b60b3375d7e2f59cfdcd82ffb127f0eb9
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Nov 29 00:57:43 2017 +0100

    [intro.scope] C++ is not a strict superset of C