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

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

Acknowledgements

Special thanks to Casey Carter for supplying a pull request to merge P0898R3 (LWG motion 28), and working with us on editorial cleanups within the 12 pages of added text.

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 6 issues in "ready" status applied:

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

CWG motion 3: P0806R2 "Deprecate implicit capture of this via [=]"

CWG motion 4: P1042R1 "__VA_OPT__ wording clarifications"

CWG motion 5: P0929R2 "Checking for abstract class types" applied, resolving 2 core issues:

CWG motion 6: P0732R2 "Class types in non-type template parameters"

CWG motion 7 was not approved

CWG motion 8: P1025R1 "Update the reference to the Unicode standard"

CWG motion 9: P0528R3 "The curious case of padding bits, featuring atomic compare-and-exchange"

CWG motion 10: P0722R3 "Efficient sized delete for variable sized classes"

CWG motion 11: P1064R0 "Allowing virtual function calls in constant expressions"

CWG motion 12: P1008R1 "Prohibit aggregates with user-declared constructors"

CWG motion 13: P1120R0 "Consistency improvements for <=> and other comparison operators"

CWG motion 14: P0542R5 "Contract-based programming" see below

CWG motion 15: P0941R2 "Feature-test macros" see below

CWG motion 16: P0892R2 "explicit(bool)"

Library working group motions

LWG motions 1-5 apply to the Parallelism TS

LWG motions 6 and 7 apply to the Reflection TS

LWG motions 8 and 9 apply to the Coroutines TS

LWG motion 10 applies to the Networking TS

LWG motion 11: Library issue resolutions for 14 issues in "Ready" and "Tentatively Ready" status applied:

LWG motion 12: Library issue resolution for 1 issue applied:

LWG motion 13: P0476R2 "Bit-casting object representations"

LWG motion 14: P0788R3 "Standard library specification in a concepts and contracts world"

LWG motion 15 was not approved

LWG motion 16: P0458R2 "Checking for existence of an element in associative containers"

LWG motion 17: P0759R1 "fpos requirements"

LWG motion 18: P1023R0 "constexpr comparison operators for std::array"

LWG motion 19: P0769R2 "Add shift to <algorithm>"

LWG motion 20: P0887R1 "The identity metafunction"

LWG motion 21: P0879R0 "constexpr for swap and swap-related functions" applied, resolving 1 issue:

LWG motion 22: P0758R1 "Implicit conversion traits and utility functions"

LWG motion 23: P0556R3 "Integral power-of-2 operations"

LWG motion 24: P0019R8 "atomic_ref"

LWG motion 25: P0935R0 "Eradicating unnecessarily explicit default constructors from the standard library"

LWG motion 26: P0646R1 "Improving the return value of erase-like algorithms"

LWG motion 27: P0619R4 "Reviewing deprecated facilities of C++17 for C++20" see below

LWG motion 28: P0898R3 "Standard library concepts" see below

Notable editorial changes

CWG motion 14

Subclause structure and paragraph order of [dcl.attr.contracts] was reworked. Several normatively-redundant statements were converted to notes or removed.

CWG motion 15

Multiple papers moved at this meeting included suggested feature-test macros. However, these were not presented as editing instructions, because we did not have feature-test macros in the standard wording yet. After consultation with CWG and LWG, the following feature test macros have been added in addition to those listed in CWG motion 15 (all with value 201806L):

CWG motions 16 and 12

CWG motion 16 would have us change wording that was deleted by CWG motion 12. The requested change in CWG motion 16 (from teletype "explicit" to body font "explicit") was ignored.

LWG motion 11: issue 2139

The underlying text has changed between the drafting of the resolution to this issue and its application. We believe every requested edit has been applied; however, an additional use of "user-defined type" has been added to [namespace.std] that should likely also have been covered by this wording. It has not been changed.

LWG motions 13 and 23

These motions both introduce a <bit> header, but the organizational structure suggested by motion 23 doesn't make sense for the functionality added by motion 13. The wording of motion 23 has been rearranged to fit into the structure established by motion 13.

LWG motions 16

Added the new contains member function for associative containers to the list of member function templates that do not participate in overload resolution unless the comparator is transparent, after consultation with LWG.

LWG motions 19 and 21

LWG motion 19 adds a shift_right algorithm to <algorithm> as a non-constexpr function template.

LWG motion 21 instructs that we mark all non-parallel algorithms in <algorithm> as constexpr. Naturally, however, its proposed wording change does not list the shift_right algorithm. After consultation with LWG, shift_right has been marked constexpr to satisfy the intent of LWG motion 21.

LWG motion 27

Synopses for <ccomplex>, <cstdalign>, <cstdbool>, and <ctgmath> were not removed; instead, they have been repurposed as synopses for <complex.h>, <stdalign.h>, <stdbool.h>, and <tgmath.h>. (The latter used to be defined in terms of the former, but can no longer be specified in that way.) Also introduced a synopsis for <iso646.h>.

LWG motion 28

Clause labels shortened and simplified throughout.

The single-item clauses [concept.movable], [concept.copyable], [concept.semiregular], and [concept.regular] have been merged into their parent, [concepts.object].

The single-item clauses [concept.signed.int] and [concept.unsigned.int] have been merged into their parent, [concept.integral].

Legacy concept names changed from Cpp98Something to Cpp17Something. Many of these concepts did not exist in C++98 (which in any case was revoked and replaced by C++03).

Reworked "uniform random bit generator" requirements to describe them in terms of the UniformRandomBitGenerator concept.

Removed "there need be no subsumption relationship" wording that is already implied by the core language rules for concepts.

Editorial paper P1076R1 "Clause reorganization"

The claue reorganization described in P1076R1 and discussed at the WG21 Rapperswil meeting has been applied to the working draft, with the following modifications:

[class.copy] was left containing only two paragraphs of text, neither of which had any normative impact. It has been removed.

The top-level subclauses of [algorithms] have been reordered to make the description of the <numeric> header fit better into its structure.

Several paragraphs of [class] describing various properties of classes have been moved into a new subclause [class.prop] "Properties of clases".

Removal of single-item subclauses

The single-item subclauses [move.iter.op=] and [move.iter.op.const] have been merged into [move.iter.cons].

The single-item subclauses [move.iter.op.star], [move.iter.op.ref], and [move.iter.op.index] have been merged into [move.iter.elem].

The single-item subclauses [move.iter.op.+], [move.iter.op.-], [move.iter.op.incr], [move.iter.op.+=], [move.iter.op.decr], and [move.iter.op.-=] have been merged into [move.iter.nav].

The now-empty [move.iter.ops] has been removed.

Minor editorial fixes

A log of editorial fixes made to the working draft since N4750 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 afe115acc28e33e48e2ece9f850820d6faa51757
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jul 6 10:47:19 2018 +0200

    [class] Introduce a subheading 'Properties of classes'.

commit d3f80a4a994a66cc8148a6031d29182aad4f16f6
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Jul 7 00:49:56 2018 +0200

    [namespace.udecl] Demote normative duplication to notes (#1976)

    The effects of using-declarations naming member functions
    are discussed in other parts of the standard.
    The effects of initializing with an inherited constructor are
    discussed elsewhere, too.

commit 9459c137f138f903d670e6689b3963f0a3f7d083
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jul 6 10:40:09 2018 +0200

    [time.point,time.duration] Remove class name repeated in subheadings (#2249)

commit 56c599f71e8a9cfe77233e5dcd77ccfe72d81af8
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Thu Jul 5 20:22:47 2018 -0700

    [algorithm.syn] Reorder after [algorithms.requirements] and
    [algorithms.parallel], which apply to both <algorithm> and <numeric>.

commit 8806777151719da531aae976c46f98c485bf0580
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Jul 4 08:39:53 2018 +0200

    [algorithms] Integrate requirements from [numeric.ops].

commit e8d3d7029c5be1494016bc03e0004d0e9eeaa8cd
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Jul 4 08:25:30 2018 +0200

    Remove [class.copy] and adjust cross-references pointing there.

    The normative statements that used to be contained in
    [class.copy] were redundant with [dcl.init] and [over.ass].

commit 006fb15de62c93b6e3de3d32648f276c9ec70181
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Jul 4 00:29:28 2018 +0200

    [class.derived,class.access,special] Move into [class], as appropriate.

    P1076R1: Editorial clause reorganization

commit 3c580cd204fde95a21de1830ace75d14d429f845
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Jul 4 00:07:05 2018 +0200

    [dcl.decl] Move into [dcl.dcl] as appropriate.

    P1076R1: Editorial clause reorganization

commit 40907944b775e4da980b69565dcbaa4bd494d347
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Jul 4 00:00:51 2018 +0200

    [namespace.udecl] Move one level up

    P1076R1: Editorial clause reorganization

commit f87c7fd1d9a258d043b7b22fb13ce6bdf6931a28
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Jul 3 23:54:36 2018 +0200

    [numeric.ops] Move into [algorithms], after [alg.sorting]

    P1076R1: Editorial clause reorganization

commit 40719643c5f237aecf0136a001cce1d85ceaaf59
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Jul 3 23:48:00 2018 +0200

    [localization] Move to before [input.output]

    P1076R1: Editorial clause reorganization

commit a41eef0a98e9727ca85ff12c99b27209969a62b8
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Jul 3 23:37:46 2018 +0200

    [time.general] Add summary table

commit 63603768789149c9b46bac7e810ddfb618e8eefe
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Jul 3 23:30:45 2018 +0200

    [time] Promote to a top-level clause.

    P1076R1: Editorial clause reorganization

commit 006a9380cfe9e00bcee9b03884b3b4bf57bf6fa2
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Jul 3 23:22:05 2018 +0200

    [conv] Move as a subclause into [expr], immediately before [expr.arith.conv]

    P1076R1: Editorial clause reorganization

commit 70adb738f6edbc0697d1f26c72040d6b3a971421
Author: Hubert Tong <hubert-reinterpretcast@users.noreply.github.com>
Date:   Thu Jul 5 16:22:22 2018 -0400

    [intro.defs] Use https in hyperlink URL; see Directives, Part 2:2018 (#2248)

commit 3fe46c716367d6e367b4c5acff344bce3f2a5cd2
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Fri May 11 11:53:45 2018 +0100

    [class] Reformat paragraph defining standard-layout class

    Move the note before the definition of M(X).
    Use a nested list for the definition of M(X).
    Move the example to a new paragraph.

commit 0cac48775c1b1db4038cc0e456ccef81d5dd5fdc
Author: timsong-cpp <rs2740@gmail.com>
Date:   Mon Jul 2 17:13:53 2018 -0400

    [concepts.{lang,compare,callable}.general] Replace "section" with "subclause".

commit 9db2f62e966224e8e749913871771dd4ac886c78
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 15 09:08:21 2018 +0200

    [basic.start,except] Harmonize references to std::terminate

commit 3846e6ba6592099145655420e3b88c6c874cd5fc
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 1 10:05:58 2018 +0200

    [over.match.viable] Fix cross-reference to satisfaction of constraints

commit 61e272c36350786e8b3fa1662efb0a8b9484cdd5
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Jun 14 11:08:25 2018 +0200

    [dcl.init.ref] Avoid use of 'underlying type' for references

commit c56870954b48305df89133a80e6ab8a21a0a90e9
Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
Date:   Mon Jul 2 17:10:38 2018 -0400

    [temp.constr.constr], [iterator.requirements.general], [re.results.size] Replace "section" with "subclause"

commit f3b625826ae894613c9ec47bd4e1874fc46e71d4
Author: timsong-cpp <rs2740@gmail.com>
Date:   Mon Jul 2 17:05:50 2018 -0400

    [concepts.object] Dissolve single-item subclauses. (#2240)

    The following subclause headings have been removed:

      [concept.movable]
      [concept.copyable]
      [concept.semiregular]
      [concept.regular]

    The content for these former subclauses now resides in the parent subclause, [concepts.object].

commit 75c9148c3d810a825765aef9f04f9689f678f7bf
Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
Date:   Sat Jun 16 15:57:32 2018 -0400

    [re.general] Refer to table as done in the other clauses

commit 2fdaf88fcffd65ea2ccc4e032e288c74ac94bb7d
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Jul 2 11:52:45 2018 -0700

    [basic.lookup.unqual] Finesse "class definition" footnote to avoid
    saying that a class definition is one of two components of the
    definition of a class.

commit 4d757ab4026f2b1af37ea1f3c6fb8fbd4c83f0dc
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sat Jun 30 00:23:57 2018 +0200

    [class.mem] Define complete-class context

    and use it, instead of having separate redundant lists
    in [basic.scope.class] and [basic.lookup.unqual].

commit ade8b020efbfa8fd220d1ed7f230850f2849d593
Author: S. B. Tam <cpplearner@outlook.com>
Date:   Tue Jul 3 02:32:45 2018 +0800

    [expr.prim.id.{un,}qual] A structured binding name is an lvalue (#2234)

    Fix wording here to match corresponding wording in [dcl.struct.bind].

commit 809a034ac0428dc71d3b07bb15c39a1131d2e3f8
Author: Michael Adams <mdadams@ece.uvic.ca>
Date:   Mon Jul 2 11:30:48 2018 -0700

    [class.copy.elision] Fix typo that accidentally makes example ill-formed

commit 61b25c662399e7ebd126ee6771126aa29fed407e
Author: timsong-cpp <rs2740@gmail.com>
Date:   Sat Jun 30 05:27:09 2018 -0400

    [{i,o}{string,f}stream.cons] Remove unmatched parenthesis (#2233)

commit 0420f57904322da8adc32890687dc914d5c06edc
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Jun 19 11:23:54 2018 +0200

    [dcl.attr.contract] Introduce subheadings and reorder paragraphs to fit

commit 492e6a79cd4b36488c248771b73b46ba54ec27a6
Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
Date:   Wed Jun 27 21:18:27 2018 -0400

    [variant.get] Consistently place comma after "otherwise"

commit 5326a0d1311682568eccd19b1f8c2512091a2a53
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Jun 28 12:42:25 2018 +0200

    [input.iterators,fs.rec.dir.itr.members] Disambiguate phrasing for previous value of iterators

commit 2f5d2cbcd69c0cb63bad481f44d32082dd68ea6c
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Jun 28 23:54:24 2018 +0200

    [depr.locale.stdcvt.req] Add normative references for encoding forms

commit 69d7e1ffeed2187c1986f727882e65890c6dfa0f
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 29 00:08:44 2018 +0200

    [optional] Move requirements from header synopsis to class template

commit 6116910802836c517ecde9237b6ffabcdafc26cf
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 29 00:15:09 2018 +0200

    [basic.fundamental] Add definition of 'fundamental type'

commit b65061ee7d81079e72b2467ac9307ba9a24aaf00
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 29 13:41:11 2018 +0200

    [expr.prim.lambda,depr.capture.this] Replace 'lambda expression'

    with the grammar term 'lambda-expression'.
    Also remove the unused definition of 'local lambda expression'.

commit 354fa005c1b8ad55ddd1bca31bf4f8bef67db46e
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri May 25 10:37:36 2018 +0200

    [dcl.init,over.match.ctor] Clarify copy-initialization for empty arguments.

    Also turn the enumeration of direct-initialization cases into
    a bulleted list, referring to grammar non-terminals.

commit 69259f9d29a571233908c4f9be5afc9b98e9a2e3
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri May 25 01:14:17 2018 +0200

    Drop redundant 'expression'

    when calling out a value category.

commit 09f1354234154602dee9a0afc12f0b160bf455ea
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Fri Jun 29 13:59:12 2018 -0700

    [dcl.attr.contract] Fix mention of odr-use of a parameter value to talk
    about odr-use of the parameter instead; values can't be odr-used.

    As agreed on the core reflector.

commit 45fa09c5e38057571284c3eda52aa479afa0f3cb
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 29 17:38:17 2018 +0200

    [temp.dep] Fix typo 'An expressions...' (#2181)

commit 50a00f2776122a1328d29332f45e3ec20ee6d0fb
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 29 00:53:00 2018 +0200

    [lex] Cite ISO/IEC 10646 correctly (#2226)

commit 6f6a5dd6de12968f447940049d7fbf447e0ccf9f
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue May 8 13:29:32 2018 +0200

    [atomics.types.operations] Avoid inappropriate use of 'underlying type'

commit 35e17ec6e2f702be4c31fd99c058404223a865da
Author: Casey Carter <Casey@Carter.net>
Date:   Thu Jun 28 12:28:20 2018 -0700

    [algorithm.syn] Relocate the "partitions" algorithms (#2219)

    Move the synopsis for the "partitions" algorithms between the "binary_search" family and the "merge" family, to agree with the order of the detailed specifications as reordered by #1245.

commit 03e97ca6af73a842d38d40977a2630b0c978eade
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Apr 19 23:12:20 2018 +0200

    [temp.arg.explicit,temp.mem] Clarify note about explicit template arguments

    for conversion function templates and constructor templates.

commit cdad8c27d822e5aec90b86a6e72e6f093d204924
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Apr 3 23:33:29 2018 +0200

    [move.iterators] Dissolve single-item subclauses.

commit 1f9524d9b2a2ec95e7b48ec82ff9782e2b79d413
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Wed Jun 27 22:42:53 2018 +0100

    [support.limits.general] Fix typo: '<forwardlist>' should be '<forward_list>'

commit e0d78d373e975ccbc7cd59d5b7292c48f920b959
Author: Alisdair Meredith <public@alisdairm.net>
Date:   Wed Jun 27 17:33:20 2018 -0400

    [span.overview] Fix reverse_iterator for span (#2112)

    There is a common convention to omit 'std::' when not strictly needed,
    other than for 'std::move' and 'std::forward'.  A third case is for
    'reverse_iterator' and 'const_reverse_iterator' type aliases inside a
    class definition, as the leading 'reverse_iterator' type alias hides
    the 'std' version from the 'const_reverse_iterator' definition, and
    subsequently fails to compile.  This patch restore the class definition
    to a safely copy/pastable state.

    An additional review indicated this convention has been applied correctly
    for every othert potential occurrence in the library.

commit 33e8e2b3c5c2ae9e53ed656f7e3dfe874e55ede3
Author: Casey Carter <Casey@Carter.net>
Date:   Wed Jun 27 14:32:34 2018 -0700

    [output.iterators] Strike useless sentence from note (#2083)

    There's no such thing as an "insert pointer," and the rest of this sentence isn't much better.

commit fe3f46b976c8c19336f0007625fe3e487827ca55
Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
Date:   Wed Jun 27 12:12:45 2018 -0700

    Harmonize phrasings of "this destructor is trivial". (#2191)

    Inspired by P0602 https://lichray.github.io/trivially_variant.html
    Zhihao suggested that we harmonize "trivially destructible"
    wording across the rest of the Standard.

commit 14809d0b4b27395ea407734d00d0f6dc9c7b0c05
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Jun 27 21:04:50 2018 +0200

    [expr.spaceship] Fix typo for std::strong_equality::nonequal (#2216)

commit 2954bfccb653504279f101cf1d8c7f9fb96947ff
Author: Sergey Zubkov <cubbi@cubbi.com>
Date:   Wed Jun 27 15:03:49 2018 -0400

    [diff.cpp17.depr] Fix typo from P0619R4 (#2217)

    In the paper, "raw_memory_iterator" was meant to say "raw_storage_iterator".

commit 264839261e3d0b0cb66415f2c1755d1f84d2cb3d
Author: timsong-cpp <rs2740@gmail.com>
Date:   Wed Jun 27 06:51:41 2018 -0400

    [istreambuf.iterator.proxy] correct title and remove default template argument (#2078)

    This is a class, not a class template. Also, the default template argument is 1) redundant and 2) ill-formed for violating [temp.param]p12.

commit e6794e6f167db93a519564d5fc986309d194e140
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Jun 27 12:49:39 2018 +0200

    [syserr] Remove class name repeated in subheadings (#2093)

commit f0e7cdd3392e91b427764abf1c9c30058a457143
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Jun 27 12:49:12 2018 +0200

    [smartptr] Remove class name repeated in subheadings (#2092)

commit a92cdcb6ca8aa43e49a54d22f8760e9ca9cbaad7
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Jun 27 12:48:03 2018 +0200

    [vector.cons] vector(const Allocator&) should be noexcept (#2182)

    This fixes an oversight in the wording of
    "N4258: Cleaning‐up noexcept in the Library",
    which updated the overview, but not the description.

commit f4a6f328137fa59bf3aa319eb4ccb743b2205dfc
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Jun 26 19:06:44 2018 -0700

    [alg.sorting] Fix grammar.

commit de4ddf0a8fa164c7b451b6bb500c492681a7738c
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Jun 26 20:00:54 2018 -0700

    [cpp.cond], [cpp.predefined], [support.limits.general] Add feature-test
    macros from 2018-06 motions:

    __has_cpp_attribute(assert)
    __has_cpp_attribute(ensures)
    __has_cpp_attribute(expects)
    __cpp_explicit_bool
    __cpp_nontype_template_parameter_class
    __cpp_lib_atomic_ref
    __cpp_lib_bit_cast
    __cpp_lib_concepts
    __cpp_lib_constexpr_swap_algorithms
    __cpp_lib_list_remove_return_type

    ... all with value 201806L.

commit 1984951deba6caeb117300b198e349b0e9bf841c
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Jun 26 18:24:56 2018 -0700

    [meta.type.trans] Strike redundant and confusing note on type member of
    basic_common_reference, and replace it with a clarifying description of
    the primary template.

commit a5a086fada4312ee1794a5d2cb65a7ce5ac284d4
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Jun 26 17:51:24 2018 -0700

    [meta.trans.other] Replace "(possibly cv) void" with just "cv void".

    These two formulations mean the same thing.

commit cc393db472ef7e89fa4e8bc8bcce6e44979efd5e
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Jun 26 17:43:51 2018 -0700

    [concept.strictweakorder] Fix grammar in note.

commit 01f681dd376ec6285fae0253d21745999fd9557f
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Jun 26 14:50:39 2018 -0700

    [concept.equalitycomparable] Remove note that the equality-preserving
    nature of == implies that == is reflexive. This turns out to not quite
    be justified by the normative rules.

commit fbc2eef266332b8dea52718640ceca7cde9d6c1f
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Jun 25 18:25:06 2018 -0700

    [concept.boolean] Reword satisfaction rules for Boolean to make them not
    appear to depend on the "given" lvalues b1 and b2.

commit d324da9c1ea4702dfb2d595390114d872f29089e
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Jun 25 18:15:28 2018 -0700

    [concept.destructible] Fix meaningless phrase "potentially-throwing,
    even if non-throwing".

    By definition, non-throwing is the opposite of potentially-throwing for
    an exception-specification ([except.spec]p1).

commit 4ac1f96f51c998846ce97e81c793484a52318357
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Jun 25 17:34:27 2018 -0700

    [concepts.equality] Add missing paragraph numbers, reorder implicit
    expression variations in example for clarity and to fix overfull hbox.

commit 60ae4bf7daae6802fefef5a5f32c1d2248a51334
Author: Casey Carter <Casey@Carter.net>
Date:   Fri Jun 22 20:28:23 2018 -0700

    [concepts] There need be no "there need be no subsumption relationship"

    ... the core language rules already imply it.

commit 11b6f1844a7b43a232d55442f4af7f9ce20faa45
Author: Casey Carter <Casey@Carter.net>
Date:   Fri Jun 22 21:14:00 2018 -0700

    [structure.requirements] Add paragraph explaining the typographical convention for requirement names

commit bfaea046b5176152a86514a886a5b7ab66e4dffe
Author: Casey Carter <Casey@Carter.net>
Date:   Wed Jun 20 09:39:06 2018 -0700

    [rand.req.urng] Rework URBG requirements for clarity and simplicitly

    ... by removing the redundance between the new concept and the "old" requirements.

    Also fixup the reference in [rand.req.eng] to properly refer [rand.req.urng] instead of the requirements table. The table has been removed, and the reference should have been to the subclause in the first place to clearly incorporate the requirements outside of the table.

commit def89125ccf441d2178e6159d6b9448f17045f6a
Author: Casey Carter <Casey@Carter.net>
Date:   Wed Jun 20 11:21:43 2018 -0700

    [meta.trans.other] Remove basic_common_reference requirement with no normative effect.

    We already say that only T and U can be specialized. We do not need to
    also say that TQual and UQual cannot be. Also clarify that users may
    *partially* specialize basic_common_reference.

commit 528d382ca9b350c3aece9a57e23a2560b7ba0651
Author: Casey Carter <Casey@Carter.net>
Date:   Tue Jun 19 16:31:00 2018 -0700

    [meta.trans.other] Make style of common_type and common_reference consistent

    ...by tagging the specification of common_reference with "Note C" and basic_common_reference "Note D".

    Also remove the allowance to specialize basic_common_reference "if at least one template parameter in the specialization depends on a program-defined type"; it's redundant with "...pursuant to [namespace.std]". (This is consistent with `common_type`'s wording.)

commit 2aa8b236c8afe09272fba8d0767fbc6552b301b5
Author: Casey Carter <Casey@Carter.net>
Date:   Tue Jun 19 16:06:03 2018 -0700

    [structure.requirements] Rephrase para 8 for clarity

commit d9c710c4f13c95d65f96d503bd45f11628fdf68a
Author: Casey Carter <Casey@Carter.net>
Date:   Mon Jun 18 06:55:44 2018 -0700

    [concepts.general][library.general] Concepts constrain template arguments, not parameters

commit a818d5bfb084da10818b830d210d8bb4312912e4
Author: Casey Carter <Casey@Carter.net>
Date:   Thu Jun 21 09:38:44 2018 -0700

    [concepts.swappable] Correct example

commit db9aee9ca04a192f32cd630cf3682d30c62a0bf7
Author: Casey Carter <Casey@Carter.net>
Date:   Tue Jun 19 15:34:43 2018 -0700

    [customization.point.object][meta.trans.other] Replace "user-defined" added by P0898R3 with "program-defined"

    ...to be consistent with the intent of LWG2139

commit 03f3764a071dfe30ef1137435a88ea036ca65c1f
Author: Casey Carter <Casey@Carter.net>
Date:   Wed Jun 20 15:16:51 2018 -0700

    [definitions] Redefine expression-equivalent per ISO directives

    To be replaceable in context, and add a clarifying example.

commit d119277cb8864be440a6e0445211c232e87f91a7
Author: Casey Carter <Casey@Carter.net>
Date:   Thu Jun 21 09:18:24 2018 -0700

    [concepts] Rephrase ocurrences of "must"

commit 16b35d651de53654321b584eba2c6c4e126eb7d8
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Fri Jun 22 18:08:26 2018 -0700

    [depr.c.headers] Undo P0619R4's removal of synopses for <ccomplex>,
    <cstdalign>, <cstdbool>, and <ctgmath>.

    Instead, repurpose these to be synopses for <complex.h>, <stdalign.h>,
    <stdbool.h>, and <tgmath.h>, and move them into [depr.c.headers].
    Also introduce a synopsis for <iso646.h>.

    This avoids three of these five headers being specified as equivalent to
    a non-existent <cfoo> header, and the other two missing a synopsis.

commit cf0749742b9318143505f9ffe2d4dabb5420d727
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Fri Jun 22 17:17:41 2018 -0700

    [diff.cpp17.library] Fix description of how to adjust code for the
    removal of <ccomplex> and <ctgmath>.

commit fa04176c01dd10105eec6590407b2c76384f5c52
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Fri Jun 22 17:06:40 2018 -0700

    [diff.cpp17.library] Fix list of new headers compared to C++17.

commit 9e80b6c69467fb2fb146637e1f0fca8b7495250f
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Fri Jun 22 16:59:45 2018 -0700

    [diff.cpp17.except] Fix Rationale to be a rationale.

    "This was retained for one additional C++ standard to ease transition"
    is not a rationale for removing the feature now.

commit 043ee628bc8accbe7f1ac4dc2210e88186bc95a4
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Fri Jun 22 16:41:51 2018 -0700

    [diff.cpp17.except] Add a note that there is no longer a way to write
    code that is non-throwing in both C++20 and C++03.

commit fd244b515387efde9fb08ffe183985a38e93d184
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Fri Jun 22 16:29:19 2018 -0700

    [diff.cpp03.language.support] Remove change described in p1, which is no
    longer a possible change.

    It is not possible to write a global replacement operator new or
    operator delete in C++20 with code that is also valid C++03, because

    a) operator new must be declared 'throw(std::bad_alloc)' in C++03 and
       must be declared with no exception specification in C++11 onwards,
    and
    b) operator delete must be declared 'throw()' in C++03 and must be
       declared 'noexcept' in C++20 onwards.

    Therefore there is no code that is valid in C++03 and C++20 and changes
    meaning due to the change identified in this section.

    Instead, expand [diff.cpp03.language.support]p2 to explain that the
    affected programs are simply not valid in C++20.

commit 3e80cd4c07563639a8ca55d41d704701ae6d0eb4
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Fri Jun 22 16:07:09 2018 -0700

    [complex.special] Reorder defaulted complex copy constructor to
    emphasize relationship between it and the converting constructors.

commit 74539419429281072e1f8b787a0ce0dc2bb067db
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Thu Jun 21 20:09:23 2018 -0700

    [atomics.ref] Reword introductory sentences to avoid overfull hbox.

commit 3c21cfcfa1091a406d4b384e4677f0fa0e8ea75c
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Mon Jun 11 19:10:53 2018 +0200

    [alg.shift] Avoid undefined iterator arithmetic on ForwardIterator.
    Avoid using the undefined concept BidirectionalIterator.

commit 949892305c88abd7c2ecb15a77bde3222366733d
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Mon Jun 11 23:43:22 2018 +0100

    [structure.specifications] remove "implementation-defined" from example
    mentioning [[expects]] and add cross-reference to [[expects]] attribute.

commit 23c6b62f321d463792c54db38a89b335dc232f3e
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Mon Jun 11 23:41:37 2018 +0100

    [structure.specifications] replace "paragraph" with "element"

commit 4aa23529058e5f17f74e663ff189a1548812e009
Author: Jonathan Wakely <cxx@kayari.org>
Date:   Mon Jun 11 23:37:31 2018 +0100

    [res.on.required] replace "paragraph" with "element"

commit 3b24b2dc75bd5b80d2c5fc1cb3fdb62ac3852d8d
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Jun 19 17:13:17 2018 -0700

    [diff.cpp17] Correct description of explicit(bool) compatibility.

    Parenthesized names for explicit constructors and conversion functions
    are still valid if the name doesn't immediately follow the explicit
    keyword. Add an example using explicit(true) as a hint indicating how
    to get the same effect.

    Change affected subclauses from [dcl.fct] to the somewhat-more-precise
    [class.ctor] and [class.conv.fct].

commit 001a2011d172cce2784857a492e2c37e25ade7e9
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Jun 18 18:19:39 2018 -0700

    [dcl.attr.contract] Fix typeface of std::terminate in comment.

commit 913c83a98735709462a49613f8993bca4042ed70
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Jun 17 09:18:08 2018 +0200

    [dcl.attr.contract] Move according to alphabetical sorting of headings

commit 463ab8dc3726514b2adf8dcf6816262f58688da3
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 15 11:01:23 2018 +0200

    [except.terminate] Clarify evaluation of a contract

commit f2f60fd4c3f9810ae815a408e1fd3ac1462482c7
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 15 10:53:18 2018 +0200

    [temp.explicit] Remove redundant rules for contracts

    given that [dcl.attr.grammar] already prohibits
    attribute-specifier-seqs for an explicit instantiation.

commit a7a0e115dbf5f149936a04f57b9dd3174c9efa6a
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 15 10:51:04 2018 +0200

    [class.virtual] Fix comment in example

commit ca0d62cc3d8c397d843fe1e1ae4a80f8fa389587
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 15 10:42:25 2018 +0200

    [dcl.attr.contract] Fix sentence defining violation handler

commit 0cd3f3dc072d736b4e8572311918bdccbb91e1f7
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 15 10:33:54 2018 +0200

    [dcl.attr.contract] Clarify evaluation of non-checked contracts

commit 2930dc55b0c5573aad90c22e1909f98bb9bec4c2
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 15 10:18:18 2018 +0200

    [dcl.attr.contract] Permit modifications of temporaries within the predicate.

commit 87c3c20540b99708b02ce3dfc6a792a3fea454aa
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 15 10:17:19 2018 +0200

    [dcl.attr.contract] Clarify that assertions may apply to a null statement

commit 072f42df7b298c3677b2a1e8f1a4687d1e005ffc
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 15 10:10:53 2018 +0200

    [dcl.attr.contract] Clarify rules on std::contract_violation

commit 77579d2f9527552820dfc667867589da12adceda
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 15 10:08:09 2018 +0200

    [dcl.attr.contract] Predicates of a contract are potentially evaluated,

    as per the definition in [basic.def.odr], so turn the
    redundant normative statement into a note.

commit da24c5df270fc17a82b6767aef5baee94fba4a45
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Fri Jun 15 09:43:43 2018 +0200

    [basic.def.odr] Rephrase ODR rule for contracts

commit 0fc2af6bbe05e16feb03e8f24651ea12e8a6997c
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Jun 10 22:53:26 2018 +0200

    [dcl.attr.contract] Reorder paragraphs for more coherence.

    Also move rules on virtual functions to [class.virtual].
    Rephase assertion checking along pre/postcondition checking.

commit 42019fd86775859393e7e5edc7e8d4c2e64c8019
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Jun 10 22:24:18 2018 +0200

    [basic.def.odr] Rephrase build level and continuation mode requirements

commit ac603143816388fa8fa12a8fb0802130b6643884
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Jun 10 22:17:23 2018 +0200

    [dcl.attr.contract] Rephrase comments in examples

commit 19d07dec4cbe5ae86eb6231eb833d166c5939faf
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Jun 10 22:14:46 2018 +0200

    [except.terminate] Add contract violation with continuation mode off

commit f28517ab52f7bf80879a7883fe08bb97020f80da
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Sun Jun 10 21:17:50 2018 +0200

    [dcl.attr.contract] Avoid duplication of 'renaming' in enumeration

commit a8b8e534a7a5235157333f6a9f64c339e48e0e86
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Mon Jun 11 15:56:16 2018 -0700

    [basic.stc.dynamic.deallocation] Remove confusing note.

    This note is only correct due to subtleties of later wording
    (particularly that a destroying operator delete cannot be a function
    template). Correcting it results in it simply duplicating existing
    normative rules and not adding anything. So remove it instead.

commit e4f579e421dac17ff36f98b2211d143991de7850
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Jun 13 09:16:17 2018 +0200

    [temp.arg.nontype] Fix example involving string literal

    P0732R2 contained some changes to this section that were missing
    explicit markup; apply those changes too. Also fix missing definition of
    operator<=> in class type used as type of non-type template parameter.

commit 5cca3b5015491a6c8b5d1d63f651073940d1145e
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Jun 13 08:34:52 2018 +0200

    [dcl.fct] Move function definition rule to [dcl.fct.def.general]

    This is the rule that requires complete non-abstract
    types function parameter or return types.

commit b39b44b32394384edcc8f7f682274fbffd22f067
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Wed Jun 13 08:28:26 2018 +0200

    [temp.deduct] Forming an array of abstract class type is not deduction failure

commit ba6cd4c525371eb98c60a025da21e5ca813b4a94
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Thu Jun 14 21:48:23 2018 +0100

    [cpp.subst] Reword paragraph to simplify the logical structure and avoid ambiguous references.

commit 4ce05424a8774e13b9958eb9cb9165da5b19edb0
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Jun 12 16:27:40 2018 -0700

    [depr.capture.this] Reorder so the order of Annex D matches the order of the main text

commit 628a32db863ac10fe0fb4c45d6975a50f5497acf
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Tue Jun 12 16:26:37 2018 -0700

    [depr.capture.this] Replace "can" with "may".

    This wording is describing permission, not capability, so should use "may".

commit 5274b2ee4c558d39012a34d104be0d2139115c00
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Fri Jun 15 14:31:14 2018 +0100

    [temp.deduct] Fixes from editorial review of CWG2293:

    * Use "not valid" rather than "invalid", since only "valid" has been defined.
    * Add an "otherwise" to improve flow.

commit 0e771884acfdcb1dc693ef654f34cf717986f803
Author: Jonathan Wakely <github@kayari.org>
Date:   Fri Jun 8 08:23:25 2018 +0100

    [time.zone.db.remote] replace "this section" with "this subclause" (#2103)

commit b9c5272c78fb312883cb548219b7fd2cb44280c7
Author: Thomas Köppe <tkoeppe@google.com>
Date:   Thu Jun 7 23:24:37 2018 +0200

    [cfenv.syn] Add "optional" markers for macros from the C library that are optional (as defined by C)

commit aa77121b3aa9bc566b8d2e428cd21a28493ce57e
Author: Alberto Barbati <2210776+iaanus@users.noreply.github.com>
Date:   Thu Jun 7 21:39:51 2018 +0200

    [dcl.attr.likelihood] Fix error in example

commit fbee1d521da91a798d81ecc09f110a0946239630
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Thu Jun 7 21:36:42 2018 +0200

    [views.general] Remove redundant introduction for span. (#2062)

commit 069a179a0d54cad4b3d00f00eae532c827786894
Author: Jens Maurer <Jens.Maurer@gmx.net>
Date:   Tue Mar 27 14:41:13 2018 +0200

    [cmp.syn] Rename to [compare.syn] to match the header name

commit 8a0060d0dcda8c63a2c432016bd038c75a8de9a1
Author: Marc Mutz <marc.mutz@kdab.com>
Date:   Thu Jun 7 03:34:12 2018 +0200

    [list.modifiers, forward.list.modifiers] Add missing 'to' in 'referred [to] by' (#2100)

commit 57de3af9d24037d60d996b255c1ded8ee65387d2
Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
Date:   Wed May 30 00:18:13 2018 -0700

    [comparisons] Fix a typo in the note for `std::less`. (#2089)

commit 61b6c21f218e3cbb9d15426975f1a26d8b72a7fe
Author: Richard Smith <richard@metafoo.co.uk>
Date:   Thu May 10 14:40:22 2018 -0700

    [class.expl.init] Fix example to account for guaranteed copy omission.