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

2018-04-02
Richard Smith (editor) (Google Inc)
Dawn Perchik (co-editor) (Bright Side Computing, LLC)
Thomas Köppe (co-editor) (Google DeepMind)
<cxxeditor@gmail.com>

Acknowledgements

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

Thanks to Walter E Brown and Peter Sommerlad for supplying LaTeX sources for their papers P0551R3 (LWG motion 13) and P0753R2 (LWG motion 14).

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 resolutions for 17 issue in "tentatively ready" status applied:

CWG motion 2: P0840R2 "Language support for empty objects"

CWG motion 3: P0962R1 "Relaxing the range-for customization point finding rules"

CWG motion 4: P0969R0 "Allow structured bindings to accessible members"

CWG motion 5: P0961R1 "Relaxing the structured bindings customization point finding rules"

CWG motion 6: P0634R3 "Down with typename!"

CWG motion 7: P0780R2 "Allow pack expansion in lambda init-capture"

CWG motion 8: P0479R5 "likely and unlikely attributes"

CWG motion 9: P0905R1 "Symmetry for spaceship" with wording changes, see below

CWG motions 10 and 11 apply to the Coroutines TS.

Library working group motions

LWG motions 1 and 2 apply to the Parallelism TS.

LWG motion 3 applies to the Reflection TS.

LWG motion 4 applies to the Coroutines TS.

LWG motion 5 applies to the Networking TS.

LWG motion 6 applies to the Library Fundamentals TS.

LWG motion 7: Library issue resolutions for 29 issues in "Ready" or "Tentatively Ready" status applied:

LWG motion 8: Library issue resolutions for 2 issues in "Immediate" status applied:

LWG motion 9: P0754R2 "<version>"

LWG motion 10: P0809R0 "Comparing unordered containers", resolving 1 library issue:

LWG motion 11: P0355R7 "Extending chrono to calendars and time zones" with wording changes, see below

LWG motion 12: P0966R1 "string::reserve should not shrink"

LWG motion 13: P0551R3 "Thou shalt not specialize std function templates!"

LWG motion 14: P0753R2 "Manipulators for C++ synchronized buffered ostream"

LWG motion 15: P0122R7 "<span>" with wording changes, see below

LWG motion 16: P0858R0 "Constexpr iterator requirements"

Notable editorial changes

CWG motion 9

After consultation with CWG, the wording for injecting additional operator<=> candidates has been editorially reworked, introducing a named set of "rewritten candidates" in the place of the ad-hoc additional lookups previously specified. That change allows the wording of this motion to be expressed more directly, but, as a consequence, the wording changes applied for this paper differ substantially from those moved.

LWG motion 11

This paper introduces a large amount of new text (~78 pages), and as such a substantial quantity of editorial changes were necessary to align the moved wording with the Working Draft's style guidelines:

LWG motion 15

Simplification of non-member swap presentation

The specification for the non-member swap function for container types has been consolidated in the container requirements table, replacing the former presentation which repeated the description once for each container.

This removes the subclauses [deque.special], [forwardlist.special], [list.special], [vector.special], [map.special], [multimap.special], [set.special], [multiset.special], [unord.map.swap], [unord.multimap.swap], [unord.set.swap], and [unord.multiset.swap].

reverse_iterator subclause consolidation

reverse_iterator previously had one subclause for each member function, in violation of our normal presentation style. These subclauses have been merged into groups of related functionality as follows:

Simplification of basic_regex constant presentation

The presentation style used for the synopsis of the basic_regex synonyms for the std::regex_constants has been shortened by use of a typedef, and the subclause [re.regex.const] containing redundant out-of-line descriptions of those flags has been removed.

Cleanup of uses of the word "concept"

In the Working Draft, the word "concept" is used both in the technical sense, denoting a C++ concept, and informally, denoting an idea or notion. We have editorially cleaned up a few of the more confusing and ambiguous instances of the term; most notably, Clause 6, formerly named "Basic concepts", is now named "Basics".

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 17191eca85eebcacbc3ef37e61ee51103d892268
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Mar 28 21:05:41 2018 +0200

    [any.class] Rephrase small-object optimization

commit 05675f74017966048a4db1a5c5419be357082622
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Mon Apr 2 22:44:03 2018 +0100

    [any.class, optional.optional] Add missing "namespace std" around class definitions.

commit 2fcacf3f23a5fbf9cd95611342803ba536904d01
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Apr 2 13:45:41 2018 -0700

    [container.node] Remove placeholder class name from subheadings.

    Partially addresses #1242.

commit 87ae756d027d7e611d6e89f7d3232a95b6c72203
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Apr 2 21:56:40 2018 +0200

    [xrefdelta] Fixes for reverse_iterator cleanup (#2015)

commit 4aa55de012f85e9f250f2c608e00a351fc9db9f1
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Mon Apr 2 13:40:32 2018 +0100

    [layout] Place footnotes at the bottom of the page. (#1830)

    This uses a feature introduced by memoir 3.7e, '\feetatbottom',
    which makes footnotes appear at the bottom of the page, rather
    than immediately following the main text.

commit 5b5d225156372b717d84e0137ab759626a8886f4
Author: Hubert Tong <hstong@ca.ibm.com>
Date:   Mon Apr 2 00:29:33 2018 -0400

    [temp.concept]: Use note; no syntax for explicit specialization, etc.

    Explicit specialization, etc. of a concept cannot be formed
    syntactically. As such, a further rule to prevent such constructs is
    redundant as normative text.

    Implements the proposed direction from core/2017/07/2719.

commit bec67956e817d7edd02bdbffe5b1254113102928
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Sun Apr 1 20:11:03 2018 -0700

    [over.match.best] Use new "rewritten candidates" terminology to simplify
    wording.

commit 51684d21aa98c6cf20a44274f38ffd07b191e2f2
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Mar 26 18:53:28 2018 -0700

    [over.match.oper] Refactor the <=> rewrite candidate rules for clarity.

commit e0a88df11e5cf0988b40dd65218d7ce9f456c763
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 11:15:42 2018 +0200

    [ostream.manip,time] Replace "can not" with "cannot"

commit 6c9e27dab526298771cdbf1a8dacf165f6547ead
Author: Tony Van Eerd <tvaneerd@gmail.com>
Date:   Sun Apr 1 22:14:59 2018 -0400

    [sequence.reqmts] Convert advice on container selection into a note.

    Also separate out the advice for std::array from that for std::vector and emphasize the main message.

commit 7e4b556f44c47c70c4d1e93c5b3c82b01a949326
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Mar 24 19:42:20 2018 +0100

    [implimits] Clarify meaning of implementation limits

commit b1c4c87a7ca880e4d2e46cb9b62517e940ef0339
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Feb 20 22:55:17 2018 +0100

    [lib] Replace 'requirements of FrobMunchable'

    with 'FrobMunchable requirements'.

commit 2a1d53b1820a460066ae374a95529c7def2dda16
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Feb 20 22:27:27 2018 +0100

    [lib] Use table references for CamelCase requirements.

commit dbeb68f0dd7bb8fd950f33a94409b9d5ba778729
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Feb 19 22:44:54 2018 +0100

    [lib] Use "shall satisfy", not "shall meet", for requirements.

commit 8738c6b38db45d06724e4a75afd2134d3f6e6f3f
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 23 21:27:11 2018 +0100

    [containers] Removed redundant specifications of non-member swap

commit 4d3434c2c9ed41c31925172948ff81166f623f64
Author: eus <eus@member.fsf.org>
Date:   Mon Apr 2 03:41:11 2018 +0200

    [expr.ass] Clarify description of simple assignment

    Replace vague "value of the expression" wording with more-precise "result of the right operand".

commit 1b4da01c47fcf7522fa3df0d8c0b96ed840f4103
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Mar 18 17:56:14 2018 +0100

    [associative.reqmts] Turn emphasis into a note.

commit 1a9fd49cdf58d6dfe8da51dcad93ce8f73f144e0
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Feb 19 18:37:49 2018 +0100

    [expr.dynamic.cast] Remove redundant statements on casting away constness

commit 73bfbf2d8a40822779dfdd544f5112fd2096a7d9
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Feb 17 11:26:07 2018 +0100

    [stmt.while] Generalize the equivalence for a declaration as the condition.

commit 1d50d2d2d2b39dda529bbfe26d5f144a8ec3eee0
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Feb 15 22:02:06 2018 +0100

    [over.match.oper] Add a note for conversions on synthesized candidates.

commit 63dd5c67b22fb48d79e86028ea0564a3d02ffd7f
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Sun Apr 1 17:31:39 2018 -0700

    [utility] Convert hanging paragraph into [utility.syn] introduction.

    For #1771.

commit eb4d1fec2fc26285b9586e2ace2c289167934811
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Feb 13 22:36:16 2018 +0100

    'floating type' is not a defined term in C++

commit 4b5d9adaaff8b2bf09f1a5a88e8875347adb6714
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Nov 16 00:48:48 2017 +0100

    [unique.ptr] Remove definition of 'transfers ownership'.

    It is mostly subsumed by the detailed descriptions of the move
    constructors and assignment operators.

commit a257a072efe2b6f2fe2dbdc5529b14315b08fbd8
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Feb 28 10:08:02 2018 +0100

    [dcl.spec.auto] Use of undeduced placeholder types

    As discussed for CWG 2285, variables declared with a
    placeholder type should never reference itself in the
    initializer.  Similarly, clarify the treatment of
    deduced function return types.

commit 27d7912784f9a092b1c5263aeb6d80838d04eac6
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Feb 28 23:49:26 2018 +0100

    [std] Review cross-references to [expr.prim]

    Cross-references to [expr.prim] should instead point to one
    of its subclauses.

commit a7fc1b661981367e3976053420488e99e22f79af
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Mar 25 16:31:20 2018 +0200

    [lib] Avoid 'shall' and 'should' in footnotes.

commit 340eac6a322c3f70734f506c627237fe58ef9e22
Author: timsong-cpp <rs2740@gmail.com>
Date:   Sat Mar 31 15:55:36 2018 -0400

    [ostream.manip] Fix typo where "basic_osyncbuf" should be "basic_syncbuf" (#2004)

commit ff08270c5411ac37c32b7c1161c1ff906b7d324e
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Mar 31 21:13:57 2018 +0200

    [span.elem] Fix misplaced colon (#2007)

commit e7479664be7bacd829a31b8302c5a9f38efb6313
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Mar 31 18:12:01 2018 +0200

    [reverse.iterators] Dissolve single-item subclauses. (#1832)

commit 6209ca1f73c66cf19c50e558546d1c9e537ba253
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Mar 31 16:39:28 2018 +0200

    [locale] Remove class name repeated in subheadings (#1932)

commit 296a41539c6e2b8b16f6c706d7d2185f7ef7f255
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Mar 31 16:39:02 2018 +0200

    [containers] Remove class name repeated in subheadings (#1933)

commit 31d6168980ef064112d1ad5498635fa9ca07bc65
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Mar 31 01:35:57 2018 +0200

    [expr.rel] Clarify auxiliary partial ordering (#1977)

commit 720b0695962cf4b37d9e0c204131d8d38a4b04de
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Mar 31 01:32:28 2018 +0200

    Remove uses of 'concept' with ordinary English meaning. (#1918)

commit 10bcbb745f0783dfefddab24755c36022c3df798
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Wed Mar 21 14:17:30 2018 +0000

    [sequences] Add exposition-only alias template for deduction guides.

commit 3fca4f451709b90435d3f84ffe5d7b13763cf58d
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Wed Mar 21 14:01:31 2018 +0000

    [associative], [unord] Use \placeholder for deduction guide alias templates.

    Also rename iter_val_t to iter-mapped-type and then add iter-value-type for value_type.

    Fixes #1523

commit 174bec6cf075f5234bebdba8361ebb477bb7a84a
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Mar 31 00:35:05 2018 +0200

    [utilities] Move chars_format bitmask statement to [charconv.syn] (#1992)

commit 22ad3d732bb6f1692693f778bf75d06e5cf8a545
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Mar 24 18:46:59 2018 +0100

    [lib] \xref may refer to standards other than C

commit 013c6e02583ab0ca723b21be4e4832ec450b4ba3
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Mar 31 00:14:20 2018 +0200

    Index all mentions of 'implementation-dependent' (#1967)

commit d17c6071d4f1db70b6335b3636150c8266e7d25d
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Mar 31 00:11:54 2018 +0200

    Typeset ordinals as "i^\text{th}" instead of "i-th" (#2003)

commit 3b582e7e19277a8b5a8bb94eab848704a734ef29
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 23:38:52 2018 +0200

    [ios.base] Disambiguate names to distinguish parameters from static data members (#1969)

commit cba9d3374881202621385e70323940780cb1f39b
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 23:35:41 2018 +0200

    [support.types.byteops] Move 'Remarks' to after 'Effects' (#1973)

commit ea4048f5899f9136820240aed2703a4762547552
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 23:32:59 2018 +0200

    [time.duration.nonmember] Replace type designator "CR" with its definition (#1985)

commit 131dfa601c0ad1d53124079ee8142ffcbd825490
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 23:30:46 2018 +0200

    [conv.fctptr, special] Pointers to members designate their target (#1968)

commit 47a27a8432016c86d3a20b0600524f0331531761
Author: FrankHB <frankhb1989@gmail.com>
Date:   Sat Mar 31 05:09:20 2018 +0800

    [over.best.ics] Fix capitalization of "conversion" in p6 (#1987)

    To avoid confusion, occurrence of "derived-to-base conversion" should not be with capital letter "C", which implies the name of a conversion category. The rank is already specified at the end of the paragraph.

commit 4143715f45af009dd98ffef02e8e1c695048e324
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 23:04:05 2018 +0200

    CWG2345 [stmt.stmt, stmt.dcl] Jumping across initializers in init-statements and conditions (#1949)

commit 42e35cf1d7a0b8084c310a4ca8ee02a3aeb127df
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 22:59:29 2018 +0200

    [dcl.fct.def.delete] Adjust 'onlydouble' example. (#1950)

commit cc5becb7e47b6f7bc53d3ad68bcfd3f0b8087025
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 22:57:35 2018 +0200

    [temp.spec] Fix cross-reference to one-definition rule. (#1980)

commit 174c44e85b419eaedf3f1d97409be889c5d72b17
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 17:15:42 2018 +0200

    [temp.local] Fix example not to name the constructor. (#1981)

commit 9355f5dd3ecf1186f139d16629f180f327ca9e59
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 17:13:19 2018 +0200

    [re.regex] Avoid duplicate list of constants (#1984)

    Shorten the synopsis and remove [re.regex.const].

commit 9c74ada42d85359d1ef83e78de359fc07de7c0db
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 17:05:55 2018 +0200

    [class.temporary] Repair example (#1944)

commit 035bd47dcb5e72b7471892a0fe005ea4daa5ece8
Author: Eelis <github.com@contacts.eelis.net>
Date:   Fri Mar 30 17:03:42 2018 +0200

    Remove [facets.examples]. (#1957)

commit dcf7f0514bf02092910788911a52e287d23594ef
Author: Jonathan Wakely <github@kayari.org>
Date:   Fri Mar 30 16:01:50 2018 +0100

    [error.reporting] Change \rSec3 to \rSec2 (#1954)

    Fixes #1953

commit 1fe02a2c9ff79d1eb0bbe8c3732ef4a5814751c8
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 16:59:48 2018 +0200

    [access] Remove inappropriate uses of \term (#1940)

commit 031d2bd4729b39be85822cecd7ca340985a8963e
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 16:57:50 2018 +0200

    [intro.abstract] Change example for unspecified behavior. (#1930)

commit feb53073b17f9b14787f7aa0d92fa4dde2b5c62e
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Mar 30 16:54:26 2018 +0200

    [insert.iterators] Dissolve single-item subclauses. (#1924)

commit 69ce701c5b37508fcc21b2396476b7f53252dfde
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Thu Mar 29 01:48:06 2018 +0100

    [views.span] Editorial review fixes:

      * [span.sub] Refactor the specification of subspan() slightly to define the return type precisely. Note that when Extent is not dynamic, then Extent and size() are the same, so we can say "size()" in both cases unconditionally.

      * Introduce new heading "Overview [span.overview]" to remove hanging paragraphs in [views.span].

      * Rephrase "Extent < dynamic_extent" to "Extent is negative and not equal to dynamic_extent" to avoid unnecessary dependency on details of dynamic_extent.

commit 88d223ccf2aa7d822fc1db6c14719c215816acf6
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Thu Mar 29 17:47:29 2018 -0700

    [ostream.manip] Rephrase references to exposition-only variable "buf",
    and add "Calls" to Effects: clause to match our style guide.

commit e1e43280e84f438edd331a8e5142c1a0760d8cf4
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Mar 26 15:21:35 2018 -0700

    Add normative references to ISO 8601 and RFC 6557, referenced
    normatively by P0355R7.

    Fixes #1971.

commit 35b73d1ce73e0dae89adae4966eea3197dfc6123
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Mar 26 18:10:25 2018 -0700

    [temp.variadic] Clarify what the elements of pack expansions are.

    Also some minor wording cleanups: strike a stray "identifier" and
    make paragraph 3 properly parallel to paragraphs 1 and 2.

commit 13f4e960592e662a275ddcc7be1bc7bc6e00bfa8
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Mar 26 17:39:24 2018 -0700

    [temp.res] Convert note to footnote to avoid breaking up flow,
    add back introductory sentence for the template validity rule,
    and fix formatting of example.

commit dec138c4f884ff6bc348da80bc7983da0a95455c
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Sat Mar 17 18:06:07 2018 -0400

    [temp.res] Clarify that we're talking about the declarator-id of
    the function or function template, not that of the
    parameter-declaration.

commit 9192d658321ebf900a1c3c52931cbf04a15b5b2f
Author: Dawn Perchik <dperchik@embarcadero.com>
Date:   Mon Mar 26 18:57:26 2018 -0700

    [diff] Replace "as the following example illustrates" with "For example" for consistency.

commit 0ad3281f3deb677f939311d3464f1155d6fc3fcc
Author: Dawn Perchik <dperchik@embarcadero.com>
Date:   Mon Mar 26 18:50:58 2018 -0700

    [diff] Be consistent in formatting and add introductions to examples.

commit 7066a903c55cffe1ca8ba8318b83b1376ed1c2b8
Author: Richard Smith <richard-github@metafoo.co.uk>
Date:   Fri Mar 16 22:00:59 2018 -0400

    [expr.reinterpret.cast] Clarify that pointer->int type restriction looks at the type not the pointer value.

    We were imprecise in what we meant by "large enough to hold it", but the intent is clear.

commit 359cc0cbece331e02787b5efd6eee4b3f0906920
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Feb 19 18:44:11 2018 +0100

    [dcl.dcl] Change example for static_assert (#1923)

commit 5a98cbfbf989151425261cb4a982c4b0b26f1a7d
Author: Casey Carter <Casey@Carter.net>
Date:   Fri Feb 16 09:29:00 2018 -0800

    [fs.path.nonmember] Fix pluralization/possessive (#1929)

commit a82582e97b4e4abaed32ea8fbe383b61562fc913
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Feb 15 23:59:05 2018 +0100

    [string.classes] Remove class name repeated in subheadings (#1928)

commit 4f11b39e4a9b55b5cc74ae8ced01122796aa0b6a
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Feb 14 22:58:16 2018 +0100

    [depr.str.strstreams] Add synopsis for <strstream> header (#1922)