N4714 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 N4700.

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

Core working group motions

CWG motion 1: Core issue resolution for 1 issue in "ready" status applied:

CWG motion 2: Core issue resolutions for 7 issues in "tentatively ready" status applied:

CWG motion 3: P0614R1 "Range-based for statements with initializer"

CWG motion 4: P0588R1 "Simplifying implicit lambda capture"

CWG motion 5: P0846R0 "ADL and function templates that are not visible"

CWG motion 6: P0641R2 "Resolving core issue #1331", resolving 1 core issue:

CWG motion 7: P0859R0 "Core issue 1581", resolving 1 core issue:

CWG motion 8: P0515R3 "Consistent comparison" and P0768R1 "Library support for the spaceship (comparison) operator"

CWG motion 9: P0857R0 "Functionality gaps in constraints"

CWG motion 10: P0692R1 "Access checking on specializations"

CWG motion 11: P0624R2 "Default constructible and assignable stateless lambdas"

CWG motion 12: P0767R1 "Deprecate POD"

CWG motion 13: P0315R4 "Lambdas in unevaluated contexts"

Library working group motions

LWG motion 1 and 2 apply to the Parallelism TS.

LWG motion 3 applies to the Networking TS.

LWG motion 4: Library issue resolutions for 24 issues in "Ready" or "Tentatively Ready" status applied:

LWG motion 5: Library issue resolution for 1 issue in "Immediate" status applied:

LWG motion 6: P0550R2 "Transformation trait remove_cvref"

LWG motion 7: P0777R1 "Treating unnecessary decay"

LWG motion 8: P0600R1 "[[nodiscard]] in the Library"

Do not try and apply LWG motion 9 to the working draft. That's impossible. Instead, only realize the truth. There is no LWG motion 9.

LWG motion 10: P0439R0 "Make std::memory_order a scoped enumeration"

LWG motion 11: P0053R7 "Synchronized buffered ostream"

LWG motion 12: P0653R2 "Utility to convert a pointer to a raw pointer"

LWG motion 13: P0202R3 "Add constexpr modifiers to functions in <algorithm> and <utility> Headers"

LWG motion 14: P0415R1 "constexpr for std::complex"

LWG motion 15: P0718R2 "Atomic shared_ptr"

LWG motion 16: P0020R6 "Floating point atomic"

LWG motion 17: P0616R0 "De-pessimize legacy <numeric> algorithms with std::move"

LWG motion 18: P0457R2 "String prefix and suffix checking"

Notable editorial changes

CWG motion 8

Instead of removing [operators] and adding a new section to [requirements], the existing stable name for this section is preserved. This section was moved to [description] rather than to [requirements], as it describes a notational device used for standard exposition.

[alg.3way] added to [alg.sorting] rather than [alg.nonmodifying] to match existing lexicographical_compare functions.

LWG motion 8

[[nodiscard]] was inadvertantly omitted from deque::empty() in the detailed wording changes (but was covered by the general description of the change). After consultation with LWG, this oversight has been corrected in the wording.

LWG motion 10

All references to the existing memory_order_* enumerators throughout the working draft were updated to use the new scoped enumerator nmaes.

LWG motion 11

Changes were made to the organization and presentation of the wording to fit better into the existing document.

LWG motion 12

The requested addition to [pointer.traits.function] has been moved into a new subclause "Pointer traits optional members" and modified slightly to fit this new presentation, as it does not describe a member of the pointer_traits primary template.

Text reorganization

In an effort to conform to ISO drafting directives to avoid hanging paragraphs (text in subclauses that also contain further nested subclauses) and to remove excessive subclause structure, the following changes have been made:

Changes in the style of specification

Drafting for future standard changes should take the above into account.

Index of library headers

In order to keep the "Index of library names" focused on listing library names, index entries for library headers have been moved to a separate, new "Index of library headers".

Minor editorial fixes

A log of editorial fixes made to the working draft since N4700 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 903df06f3e67c9a52539892cb6844b55392c5331
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Mon Nov 27 22:00:03 2017 +0000

    [allocator.adaptor.syn] Delete duplicate declarations of relational operators

commit cebfe0a09fb56ec33726559c8b6d006dc19e4ab7
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Nov 15 23:18:22 2017 +0100

    [temp.constr.order] In definition of 'subsumes', remove
    confusing introductory paragraph.

commit 74df95e9e3fad1aa5844c281614bbfffb1cc6189
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Nov 22 23:45:18 2017 +0100

    [diff] Introduce numbered paragraphs

commit e543af304e195ad301da272caa7ef12107077ac0
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Nov 25 00:01:36 2017 +0100

    [lib] Harmonize spacing for template headers.

    Use 'template<class T>'.
    Also remove space between two closing template brackets.

commit b73e56f7a2b92449d9ec4938b01fa7014edad33a
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Nov 15 23:26:11 2017 +0100

    [basic.link] Entities declared in an unnamed namespace
    never have external linkage.

commit fc16d3133817701a780092cf6456722a40e27d28
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Nov 19 23:11:51 2017 +0100

    [temp.arg.explicit] Remove note obsoleted by P0846R0

commit d29bd8c6591fe74b095e5bd277f986462ba40b24
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Nov 26 18:36:42 2017 +0100

    [fs.op.funcs] Separate effects from returns. (#1848)

commit e2457df32a6ee70417681de10be78eb815a0b22f
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Nov 20 10:23:18 2017 +0100

    [complex.numbers] Use \xref for references to the C standard.

commit bd2ce5c2d4ec26a5c412160ce5983149c510a131
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Nov 21 23:35:02 2017 +0100

    Create a new index for library headers

    and remove them from the index of library names.

commit d1125303456c2305a72baebbb51d80151722f8ab
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Thu Nov 23 14:33:32 2017 +0000

    [basic.life],[mem.res.private],[mem.res.pool.mem],[mem.res.monotonic.buffer] fix cross-references

commit 1d467a8a06cabd314e250a04ca9a4c81591d035a
Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
Date:   Thu Nov 23 15:31:45 2017 -0400

    [func.require] Clarify which assignment operators

commit 9dbbf9cbbe6994f7d4ad19098029e995eb34e1c3
Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
Date:   Sat Nov 25 19:04:08 2017 -0400

    [unord.req, fs.path.io] Fix "Effects: Equivalent to" styles (#1806)

commit efdda2b9ca7f0ed78d7f134d8b1ca2e405610190
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Nov 25 22:57:08 2017 +0100

    [lib] Harmonize punctuation of 'Effects: Equivalent to' (#1815)

commit 63ccd0513f6d9ac3555ca8becfcd7d15ed503522
Author: stbergmann <sbergman@redhat.com>
Date:   Sat Nov 25 03:33:31 2017 +0100

    [basic.types] Add missing "be" in note (#1839)

commit 9a8f4fde487200bcf4433facb0274f67d540617c
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Nov 25 03:29:09 2017 +0100

    [lex.ccon] Align char16_t phrasing to UTF-8 one (#1847)

commit 784f8c9980a74393ceaf201b343aa232a82113a4
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Fri Nov 24 01:03:52 2017 +0000

    [complex{,.special,.members}] Use injected-class-name in class definitions and itemdecls

commit 877918fdc3e5223006b782d3c5959470bd7c02a8
Author: Jonathan Wakely <github@kayari.org>
Date:   Fri Nov 24 00:57:49 2017 +0000

    [allocator.requirements] Fix pointer_to expression and reinstate descriptive variable 'r' (#1656)

commit 2ca4340d93ec4cd63c330303e5beef20db8604df
Author: Jonathan Wakely <github@kayari.org>
Date:   Thu Nov 23 22:48:22 2017 +0000

    [vector.bool] Use injected-class-name in synopsis (#1844)

commit 4eedcb0d29f7c3b143dc3492caecb9c608590e12
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Wed Nov 22 19:26:28 2017 -0800

    [diff.cpp17.library] Add Annex C entry for new headers <compare> and
    <syncstream> added since C++17.

commit 9112c6aecc48e1a0deea1f9493de224a43689a87
Author: Aaron Ballman <aballman@grammatech.com>
Date:   Mon Mar 13 09:51:35 2017 -0400

    Use the terms "single-object delete expression" and
    "array delete expression" as definitions, removing
    the italics when not appropriate.

commit b3b8a19812829ab521958eed6b2f1a3411180cdb
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Sun Nov 19 22:17:17 2017 +0000

    [structure.summary] Remove obsolete paragraph about Note(s): and Example(s): elements that we no longer provide

    Also restyle a manual Note: in [unord.req] to use the standard note environment.

commit 8958e953fd2cd60bd02ed4fcd2c055eded6e0f4d
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Nov 21 23:28:52 2017 +0000

    [unord.req] Spell out the behaviour of cbegin/cend, remove ambiguous note

commit b64354a7503c1cdc358d7f5dd1405ed903e170ef
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Nov 22 12:10:00 2017 +0000

    [depr.meta.types] Merge POD deprecation into existing type traits deprecation section and reorganize the section a bit

commit 374252a76008ac0316320d2dd4e8652910539a97
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Nov 22 01:01:39 2017 +0100

    [util.sharedptr] Dissolve subclause and integrate contents into parent. (#1814)

commit 75c0adccb38301f66979cc3c3ab5cd15a0a75a17
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Nov 21 23:29:05 2017 +0100

    [expr, over] Add cross-references for 'usual arithmetic conversions'. (#1804)

commit 7670c1a8e025aa464fe5bebff7ae2626fb01b07f
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Feb 7 11:10:48 2017 +0100

    [structure.specifications] Do not use library description macros in running text

    This avoids colons in running text and some bad spacing.

commit deb9fb19a039dbcd943a5955064d8c0e3d55a45c
Author: Alisdair Meredith <alisdairm@me.com>
Date:   Sat Mar 4 06:46:30 2017 -1000

    Consistent comma after e.g. and i.e.

    After grepping to determine the preferred idiom, it seems clear that
    the standard prefers to follow both e.g. and i.e. with a comma, rather
    than omit it.  This patch applies that rule to the few places that
    were missing the comma.

commit e1b92d6c125ef43e19915ba0b031baa2c6611c62
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Nov 21 18:01:18 2017 +0000

    [over.match.best] Remove meaningless "i.e."

commit 72b80b32c7ab185cc08eb72cf24ce6d839f7e6f3
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Nov 21 16:19:36 2017 +0000

    [alg.partition] Use established terminology 'partitioned with respect to'

commit b4a1e3c1c73531f3a61ae6e44abecab766e9c537
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Nov 21 15:52:31 2017 +0000

    [binary.search] Formulate partitioning requirements in the same style as all the other related algorithms do

commit b1fd50580cf389c61635a5767bf46b1b8823ce0c
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Nov 21 13:04:27 2017 +0100

    [expr.compound] Expression operators do not 'return' results. (#1818)

commit 68e53321ed7bf8505748e0f69947e21f9374d3a2
Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
Date:   Tue Nov 21 08:02:52 2017 -0400

    [strings.general] Use plural "string classes" (#1823)

    The summary even says "string classes", and now we also have the "string_view classes".

commit a5c25539b2605d8e6817b43d48e359d24642d1b7
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Nov 21 11:46:26 2017 +0100

    [variant] Move 'Otherwise' to start of following bullet. (#1813)

commit e13e3097e6c92f67b86458af9a3d4793b0aeb544
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Tue Nov 21 01:49:37 2017 +0000

    [utilities] Add missing charconv entry to summary table

commit cbd25c4b3e6f83aaf2fa9fe894ff52b1f428a8c5
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Sun Nov 12 00:37:09 2017 -0700

    Hyphenate 'pointer-to-member' when it is an adjective and define the adjective.

    Fixes #1369.

commit 801fb0ba013362cede5a9eaeae0da688e554d3ad
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Nov 12 06:51:19 2017 +0100

    [conv.rank] Move from [conv] to [basic.types] (#1802)

commit ff65cec7b977db1a6900b0321f10c91e152ab8d2
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Nov 1 23:39:21 2017 +0100

    Use 'trailing requires-clause'

    where the requires-clause in a template-head is not meant.

    Fixes #1672.

commit 672bb6075cb0512a234b4f6bdd41f00cc01e6642
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Apr 19 23:03:42 2017 +0200

    [dcl.init] Clarify introduction

    Fixes #1615.

commit 7c6f936298543387f2f17563f01e95fce904783d
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Nov 2 22:18:04 2017 +0100

    [array] Dissolve single-item subclauses.

    Partially addresses #1242.

commit 04c4e8338eadb18deb63354a95c2624ef5b3fbed
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Nov 11 19:34:18 2017 +0100

    [intro.execution] Clarify full-expression in example.

    Fixes #1706.

commit 2e25955ecf6a576c98590097ec76aa616495c466
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Nov 11 07:29:23 2017 +0100

    [expr] Add subclauses and adjust cross-references to [expr].

    Also move [basic.lval] into [expr].

commit 87c88e99620ecbc3958dc0e06d86aa72806206c4
Author: Casey Carter <Casey@Carter.net>
Date:   Sat Nov 11 21:48:25 2017 -0700

    [algorithms.general] & [algorithm.syn] name "mutating sequence operations" consistently (#1801)

    Despite the stable name "alg.modifying.operations," the section is titled "Mutating sequence operations."

commit 0963b3d26dcce7dff2b924e4d9d3daff0e1f50d6
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Nov 12 05:32:46 2017 +0100

    [lib] Harmonize introductory comments in synopses (#1775)

    Even if no section reference is given, make them lowercase
    and remove trailing colons.

commit 6b6578cc415bf17b237a0889ef2dc53f4b392d02
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Nov 12 05:30:40 2017 +0100

    [locale.moneypunct.virtuals] Add reference to ISO 4217. (#1779)

commit 49870469d0a3347b91e42faa9c931859e924e83e
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Nov 12 04:21:40 2017 +0100

    [lib] Add hyphen to 'well-defined' (#1776)

commit 982a456f176ca00409c6e514af932051dce2485f
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Nov 11 05:06:58 2017 +0100

    [intro], [basic] Rearrange subclauses

    Fixes #1539.

commit 301a71e35c49fafe2188736aff2631f36c81dd47
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Fri Nov 10 23:55:37 2017 -0800

    [basic.lookup.argdep] Correct xref to point to the normative invisible
    friend rule.

commit 4f77c89e7635c8a9f361a0757c7765bcefeacd5e
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Thu Nov 9 17:33:33 2017 -0700

    [over.built] Improve placeholder phrasing

commit 24bfe67b857bc6634ffc796324999373352d6d72
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Nov 8 23:50:33 2017 -0700

    [meta.endian] Clarify wording regarding size of scalar types

commit 7a7d123584613a90cc64dbfb4b848807c3f085c8
Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
Date:   Wed Nov 8 01:50:47 2017 -0400

    [any.class] Revert dot to comma typo from bdff8687c (#1795)

commit ee8aa525e65ada1f1949ebc9eb006af8b29f7e85
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Wed Nov 8 00:13:27 2017 +0000

    [basic.ios.members], [streambuf.virt.put], [cmplx.over] replace enumerated lists with itemized

commit 6ca5523589f8eb8d2843fe34386382a34064f41d
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Tue Nov 7 23:24:36 2017 +0000

    [fstream], [fs.class.directory_entry] qualify filesystem::path consistently

commit b4acb0ca022f5b4e8a535a164c845ab87e312a1f
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Nov 7 08:56:03 2017 -0800

    [basic.def] Fix typo "braced-enclosed".

commit b174bd63680803b18f1ebce4d743b13c257cd3bf
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Thu Nov 2 18:54:45 2017 +0000

    [defns.referenceable] Remove duplicate 'an'

commit f0b892320c609974270ccd415ecef081529e664f
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Nov 2 03:19:54 2017 +0100

    [array.size] Remove full member declaration from itemdecl. (#1790)

commit ea4b17a448b46671488b96812629d92c0c9c61be
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Oct 27 00:53:45 2017 +0200

    [expr.prim.lambda.capture] Move discusssion of capture-by-reference of references

    to after the introduction of 'capture by reference'.

    Fixes #1785.