N4566 Editor's Report -- Working Draft, Standard for Programming Language C++

Richard Smith
Google Inc


Very special thanks to Dawn Perchik, who performed nearly all the edits for motions moved at Kona (any errors are mine).

Thanks to all those who have submitted editorial issues and 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 from 21 issues applied, resolving 23 issues:

CWG motion 2: P0001R1 "Remove Deprecated Use of the register Keyword"

CWG motion 3: P0002R1 "Remove Deprecated operator++(bool)"

CWG motion 4: P0012R1 "Make exception specifications be part of the type system, version 5"

CWG motion 5: P0061R1 "__has_include for C++17"

CWG motion 6: P0134R0 "Introducing a name for brace-or-equal-initializers for non-static data members"

CWG motion 7: P0136R1 "Rewording inheriting constructors (core issue 1941 et al)"

Library working group motions

LWG motion 1: Library issue resolutions for 34 issues applied:

LWG motion 2: Library issue resolutions for 4 issues applied:

LWG motion 3: P0004R1 "Remove Deprecated iostreams aliases"

LWG motion 4: P0006R0 "Adopt Type Traits Variable Templates for C++17"

LWG motion 5: P0092R1 "Polishing <chrono>"

LWG motion 6: P0007R1 "Constant View: A proposal for a std::as_const helper function template"

LWG motion 7: P0156R0 "Variadic lock_guard (rev 3)"

LWG motion 9: P0074R0 "Making std::owner_less more flexible"

LWG motion 10: P0013R1 "Logical type traits rev 2" (plus _v templates as LWG motion 4 was applied)

Editorial changes to papers as moved

CWG motion 1, issue 1990

Italicized the term "conversion function" in its definition (and added index entry).

CWG motion 3

The Annex C entry was added into a section for Clause 5 [expr], instead of a section for Clause D [depr], because that is where the normative wording for this feature used to live.

CWG motion 4

The change to [except.spec] 15.4p1 could not be applied, but the current wording is correct. Editorially fixed formatting errors in wording, reformatted text for consistency and readability, and fixed use of macros.

The change in the formulation of function pointer decay that avoids suggesting that only possibly-throwing functions decay has been applied to two more places in [except.handle].

Minor editorial fixes

A log of all editorial fixes made since N4527 is below:

commit de6f56a818884092d4ce4aa5e49af9f357007901
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Wed Nov 4 14:28:15 2015 -0800

    [dcl.constexpr] Consistently describe rules for validity of constexpr
    function definitions as "requirements" so that the cross-references
    to this definition use the same term as the definition itself.

commit 4dbad61e6eee2552c29e1c50c4d34db906d25009
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Wed Oct 7 14:32:19 2015 -0700

    [cstdint.syn] <cstdint> defines no functions; don't suggest that it does.

commit f853831b14614a47d6ea11d29837c88d6ef4bb8a
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Nov 9 01:11:45 2015 -0800

    [meta.logical] Improve formatting for consistency with other library

commit c49db1de03a6a777e827d62eeeaa6523a0a22f5f
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Sat Oct 24 11:24:36 2015 -0700

    [dcl.init.list] Update example to reflect that binding a temporary to a
    reference is ill-formed; this also applies to std::initializer_list
    initialization, which is specified as performing a reference binding.

commit be5adfba61b146272b23442cd2fdef5bd94485f9
Author: Dawn Perchik <dperchik@embarcadero.com>
Date:   Thu Oct 29 13:27:32 2015 -0700

    [over.load] Added cross references to function/array vs. pointer in overloading

commit c54cf0dcbf00cf2f16c9da8535abc939ac4321ad
Author: Dawn Perchik <dperchik@embarcadero.com>
Date:   Wed Oct 28 18:28:17 2015 -0700

    [expr] Add missing indexes for definitions, and make others consistent.

    Indexes were added for the following definitions:
    [expr.const] constant expression
    [expr.const] core constant expression
    [expr.const] integral constant expression
    [expr.const] converted constant expression
    [gram.expr] built-in operators
    [expr.call] virtual function call
    [expr.call] default argument promotion
    [expr.new] allocated type
    [expr.prim.lambda] implicit capture

commit 283dae57ee352153cd2954c98e6e1c747d137a29
Author: Dawn Perchik <dperchik@embarcadero.com>
Date:   Wed Oct 28 16:02:39 2015 -0700

    [gram.expr] Add an index to the definition of "composite pointer type"

commit d550da35efc7b8b410a19fd25317521f538c5f7c
Author: Dawn Perchik <dperchik@embarcadero.com>
Date:   Wed Oct 28 15:51:38 2015 -0700

    [gram.expr] Add an index to definition of term "cv-combined type"

commit b2fcd697f378a212f2e6dc5225c74a2b7566be76
Author: Dawn Perchik <dperchik@embarcadero.com>
Date:   Wed Oct 28 15:43:34 2015 -0700

    [unord.req] Change object to value to match cleanup after merge with LWG2059.

    Referenced cleanup is "[unord.req] Made intro wording for Table 103 more consistent."

commit 9fb82225f03cda7f1ee5427b87f986e7b010ff47
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Thu Oct 22 16:06:22 2015 -0700

    [dcl.array] Fix typo; multiple array declaratiors create a
    multidimensional array type, not necessarily a multidimensional
    array object.

commit 3454b4dd7003a9104755c6640beb9389ee385644
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Wed Oct 21 17:56:46 2015 -0700

    [diff.cpp11] Add a note that default member initializers for aggregates
    is a breaking change compared to C++11.

    Fixes CWG2114.

commit e00fab806aef1855364bc416265b74e5da94aa99
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Wed Oct 21 17:44:42 2015 -0700

    [temp.class.spec.match] Repeat a portion of an example so we don't
    separate the declaration and use of some template specializations
    by several pages.

    Fixes CWG2035.

commit 2d4e4e771e6722e26f099eddf25721036a603a9e
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Wed Oct 21 17:38:49 2015 -0700

    [dcl.attr.grammar] Remove grammar ambiguity from balanced-token-seq.

commit 2bbbce9326e265227c5651e9c5a7689f23f5d7e0
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Wed Oct 21 13:06:29 2015 -0700

    Update some cross-references from [class.union] to [class.union.anon].

commit 3cb61dafd6c79a0556ccb7e8e02c45e4f30c348f
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Wed Oct 21 12:30:53 2015 -0700

    [class.union] Split wording for anonymous unions to a new subclause,

commit 15124e411210030af3f85173014d09f72ce82741
Author: Dawn Perchik <dperchik@embarcadero.com>
Date:   Wed Oct 21 09:42:02 2015 -1000

    [class.union] Make terms "union-like class" and "variant member" indexed definitions.

commit e1961df118a01532677b22335f2e0d739addfe76
Author: Dawn Perchik <dperchik@embarcadero.com>
Date:   Tue Oct 20 22:29:31 2015 -1000

    [diff.cpp14.depr] Fix hard coded reference to Annex D.

commit 94762ac9a220c9be2ab7091d786a9ed72e0e5fb0
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Oct 20 18:25:00 2015 -0700

    [except.spec] Fix capitalization mismatch at start of bullets.

commit 6dc1fe0e83a5b592b55d7bb6d1454b340bd7a202
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Wed Oct 7 13:38:37 2015 -0700

    [new.delete.array] Add missing changes from LWG206.

    The relevant editor's report indicates that the wording changes were
    reworded, but that rewording lost a normative requirement (that a
    replacement `operator new[](size_t, nothrow_t)` returns a pointer
    as if produced by calling `operator new[](size_t)`).

    Fixes #543.

commit 777e2a9aacd404db27f7563212cd12c3f571f9ac
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Wed Sep 30 11:06:56 2015 -0700

    [temp.dep] Remove duplicate 'if'.

commit 37776fa9f469e563f3288835e9e6c9d6fb7a2f88
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Mon Sep 28 12:25:21 2015 +0100

    [thread.condition.condvar] wait() cannot timeout.

commit 059b074a86953da500b9aa18c59c93adcb984d3c
Author: Daniel Frey <d.frey@gmx.de>
Date:   Fri Sep 18 19:58:15 2015 +0200

    Change "typename decay<F>::type" to "decay_t<F>"

    Looks like this one was overlooked when `decay_t` (and the other `_t` helpers) were introduced.

commit 540d881be3c46693529273649aacb9fc830bb987
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Wed Sep 16 10:40:40 2015 +0100

    [library.general] Fix typo.

    Fixes: #538

commit 8210be74e8b92f6c841fb330dcfbe28d553a1eed
Author: FrankHB <frankhb1989@gmail.com>
Date:   Mon Sep 14 14:34:33 2015 +0800

    [tuple.assign] Fix typo

    Fixed redundant ')'.

commit 24264e56e289991f247daed172d9a6960a85395b
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Tue Aug 25 19:56:42 2015 +0100

    [util.smartptr.shared.const] Add missing period.

commit 4e01e8ce7f6667692b799c828c85b7306745225f
Author: andypea <andrew.punnett@gmail.com>
Date:   Tue Aug 18 17:24:29 2015 +1200

    [ext.manip] Replace a colon with a semi-colon.

commit d36ffa694a8a8460398aa2a75be1b8dcf8b720c4
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Jul 21 11:56:46 2015 -0700

    [class.protected] Update example to match CWG1873.

    Fixes #527.

commit 6bc0318540e528031dac40fb54eee3c93a856616
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Thu Jul 9 17:56:12 2015 -0700

    [dcl.enum] Fix italicization of non-definition of "underlying type".

commit 6739a892b2d92410f56a0b6d6055082f287031dc
Author: Aaron Ballman <aaron@aaronballman.com>
Date:   Mon Jul 13 14:16:03 2015 -0400

    cv-unqualified is not a grammar term in this context, similar to other uses in the same paragraph.

commit b6d6cec80404d88f553868fa8167d3d68b87cdd2
Author: Aaron Ballman <aaron@aaronballman.com>
Date:   Mon Jul 20 14:30:06 2015 -0400

    Another ODR spelling change. Should be the last one.

commit 33345c9e46db667b41e8b708db6d79f35fbfeffa
Author: Aaron Ballman <aaron@aaronballman.com>
Date:   Mon Jul 20 13:54:20 2015 -0400

    Unify the spelling of one-definition rule to be consistent.

commit 968cc327f6e217609596763711225cd51f3e9865
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Fri Jul 17 10:26:08 2015 +0100

    [ostream.seeks] Fix nesting of itemdecl inside itemdescr.

    Reported by Stephan T. Lavavej. Fixes #524.

commit f60466ccd45df1e560403d8482e9c08df7a97248
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Sat Jul 11 17:12:34 2015 +0100

    [allocator.adaptor.members] Use code font for class name.

commit bc293b7d32a2dde11bd0f60a92d5371acff1f3d0
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Sat Jul 11 16:46:49 2015 +0100

    [allocator.adaptor.members] Add space after comma.

commit efc600e757239d00baf759efac7cd979fe0152b3
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Thu Jul 9 17:41:00 2015 -0700

    [dcl.fct.def.delete], [dcl.constexpr], [class.friend]: Replace "implicitly inline" with "implicitly an inline function", because the latter is the term defined in 7.1.2.

commit 299ec33999ca8d57ce40d5663373d8da46de0baa
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Sun Jul 5 17:44:43 2015 -0700

    [namespace.udecl] Remove incorrect example.

    CWG36 (still open) notes that this example is incorrect, but was left in
    the standard, confusing people for 17 years. Remove the example rather
    than fixing it to match the normative text, because the validity of this
    code is still under dispute.

commit 90352854d99ee3e3b2f935bba47c6749365d52d8
Author: Dawn Perchik <dperchik@embarcadero.com>
Date:   Mon Jun 29 13:21:25 2015 -0700

    [class.union] Change "but not" to "but it shall not have" as suggested by Hubert Tong.

commit c62428ecedb6ddc076e3d1b37e9e2bfad591b7bc
Author: Aaron Ballman <aaron@aaronballman.com>
Date:   Fri Jun 26 15:19:38 2015 -0400

    Align declarations

commit 05deea2df70aee5fa37e7a91b041a86bd8723d01
Author: Dawn Perchik <dperchik@embarcadero.com>
Date:   Fri Jun 19 08:57:08 2015 -0700

    Fix references in CWG1780 as per discussion on c++std-core.

commit e6e356c0ba3ba0e552f4f924e166fcab53b9a2a1
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Jun 16 12:49:16 2015 -0700

    Update Annex A and Annex F to reflect recent changes.

commit 93570180234ec5b99df4a2b13835c34b35734ae9
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Thu May 28 10:18:19 2015 -0700

    [ratio.arithmetic] Improve indentation of comment in example.

commit 9330d4ae5a23be00d61caea4eeaad8184421fbec
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Sun Jun 7 12:45:20 2015 -0700

    [except.spec] Remove spurious parens in example.

commit 093c1eebd3e2a1682331e8b1bd16677cbdb79d6f
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Tue May 26 18:41:29 2015 +0100

    [streambuf], [istream], [iostreamclass], [ostream] These are class templates not classes.

commit 6f009e72cf5dc2b1de0ac6a1d7abce63ebd4526d
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Tue May 26 18:37:56 2015 +0100

    [streambuf] Use injected class name for basic_streambuf.

commit c99b9246e43bdf60b79fd406f3774c226a3f3433
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Fri May 22 18:07:38 2015 +0100

    [support.dynamic] LWG2458 remove correct signatures

commit 2c4c7a5b9098a6231bf3885fe96fbc9deb2f047f
Author: Maurice Bos <m-ou.se@m-ou.se>
Date:   Fri May 8 11:32:55 2015 +0200

    s/template classes/class templates/