diff --git a/papers/n4827.html b/papers/n4827.html new file mode 100644 index 0000000000..88208bda31 --- /dev/null +++ b/papers/n4827.html @@ -0,0 +1,965 @@ +N4827 +

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

+ +

2019-08-06
+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 several paper authors +for supplying the LaTeX sources for their papers.

+ +

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 10 issues in "tentatively ready" status applied: (DR)

+ + + +

CWG motion 2: P1161R3 "Deprecate uses of the comma operator in subscripting expressions"

+ +

CWG motion 3: P1331R2 "Permitting trivial default initialization in constexpr contexts"

+ +

CWG motion 4: P0735R1 "Interaction of memory_order_consume with release sequences"

+ +

CWG motion 5: P0848R3 "Conditionally trivial special member functions"

+ +

CWG motion 6: P1186R3 "When do you actually use <=>?"

+ +

CWG motion 7: P1301R4 "[[nodiscard("should have a reason")]]"

+ +

CWG motion 8: P1099R5 "using enum"

+ +

CWG motion 9: P1630R1 "Spaceship needs a tune-up"

+ +

CWG motion 10: P1616R1 "Using unconstrained template template parameters with constrained templates"

+ +

CWG motion 11: P1816R0 "Class template argument deduction for aggregates"

+ +

CWG motion 12: P1668R1 "Enabling constexpr intrinsics by permitting unevaluated inline assembly in constexpr functions"

+ +

CWG motion 13: P1766R1 "Mitigating minor modules maladies"and accept the changes therein for default arguments and classes having typedef names for linkage purposes as Defect Reports.

+ +

CWG motion 14: P1811R0 "Relaxing redefinition restrictions for re-exportation robustness"

+ +

CWG motion 15: P0388R4 "Permit conversions to arrays of unknown bound"

+ +

CWG motion 16: P1823R0 "Remove contracts"

+ +

CWG motion 17: P1143R2 "Adding the constinit keyword"

+ +

CWG motion 18: P1452R2 "On the non-uniform semantics of return-type-requirements"

+ +

CWG motion 19: P1152R4 "Deprecating volatile"

+ +

CWG motion 20: P1771R1 "[[nodiscard]] for constructors" (DR)

+ +

CWG motion 21: P1814R0 "Class template argument deduction for alias templates"

+ +

CWG motion 22 was withdrawn

+ +

CWG motion 23: P1825R0 "Merged wording for P0527R1 and P1155R3" (DR)

+ + + +

CWG motion 24: P1703R1 "Recognizing header unit imports requires full preprocessing"

+ +

CWG motion 25: P0784R7 "More constexpr containers"

+ +

Library working group motions

+ +

LWG motion 1: Library issue resolutions for 17 issues in "Ready" and "Tentatively Ready" status applied: (DR)

+ + + +

LWG motion 2: P1355R2 "Exposing a narrow contract for ceil2"

+ +

LWG motion 3: P0553R4 "Bit operations"

+ +

LWG motion 4: P1424R1 "constexpr feature macro concerns"

+ +

LWG motion 5: P0645R10 "Text formatting"

+ +

LWG motion 6: P1361R2 "Integration of chrono with text formatting"

+ +

LWG motion 7: P1652R1 "Printf corner cases in std::format"

+ +

LWG motion 8: P0631R8 "Math constants"

+ +

LWG motion 9: Synchronization library:

+ + + +

LWG motion 10: P1466R3 "Miscellaneous minor fixes for chrono"

+ +

LWG motion 11: P1754R1 "Rename concepts to standard_case for C++20, while we still can"

+ +

LWG motion 12: P1614R2 "The mothership has landed"

+ +

LWG motion 13: P0325R4 "to_array from LFTS with updates"

+ +

LWG motion 14: P0408R7 "Efficient access to basic_stringbuf's buffer"

+ +

LWG motion 15: P1423R3 "char8_t backward compatibility remediation"

+ +

LWG motion 16: P1502R1 "Standard library header units"

+ +

LWG motion 17: P1612R1 "Relocate endian's specification"

+ +

LWG motion 18: P1661R1 "Remove dedicated precalculated hash lookup interface"

+ +

LWG motion 19: P1650R0 "Output std::chrono::days with d suffix"

+ +

LWG motion 20: P1651R0 "bind_front should not unwrap reference_wrapper"

+ +

LWG motion 21: P1065R2 "Constexpr invoke"

+ +

LWG motion 22: P1207R4 "Movability of single-pass iterators"

+ +

LWG motion 23: P1035R7 "Input range adaptors"

+ +

LWG motion 24: P1638R1 "basic_istream_view::iterator should not be copyable"

+ +

LWG motion 25: P1522R1 "Iterator difference type and integer overflow"

+ +

LWG motion 26: P1004R2 "Making std::vector constexpr"

+ +

LWG motion 27: P0980R1 "Making std::string constexpr"

+ +

LWG motion 28: P0660R10 "Stop token and joining thread"

+ +

LWG motion 29: P1474R1 "Helpful pointers for ContiguousIterator"

+ +

LWG motion 30: P1523R1 "Views and size types"

+ +

LWG motion 31: P0466R5 "Layout-compatibility and pointer-interconvertibility traits"

+ +

LWG motion 32: P1208R6 "source_location"

+ +

Notable editorial changes

+ +

LWG motions 5-7

+ +

The new std::format library underwent substantial editorial rework +for clarity and precision. +Thanks to Tomasz Kamiński and +Johel Ernesto Guerrero Peña +for reviewing the resulting edits, +and to Victor Zverovich for responding to various questions about intent.

+ +

LWG motion 10

+ +

The operator<< added for hh_mm_ss was written in terms of +the old chrono formatting machinery that was replaced by +std::format-based machinery by LWG motion 6. +It has been rephrased in terms of std::format. +Thanks to Howard Hinnant for providing wording.

+ +

LWG motion 11

+ +

In addition to the requested renames, the following concepts were also renamed, +following the editorial instructions to rename all other concepts:

+ + + +

LWG motion 26, 27

+ +

These motions would have added constexpr to +operator<, operator>, operator<=, operator>=, and operator!= functions +that LWG motion 12 removed. +Instead constexpr was added to the replacement operator<=>.

+ +

Section label changes

+ +

Several section labels introduced by the motions papers have been modified +to match our style guide. In addition to the section labels affected by the +above motions, the following section labels have been renamed:

+ + + +

Minor editorial fixes

+ +

A log of editorial fixes made to the working draft since N4820 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 915031ddbf75f856efcea43928d9f459140834fd
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Tue Aug 6 09:31:52 2019 +0200
+
+    [meta.trans.other] Use hyphens, not underscores, for meta-functions.
+
+commit 43945886b4ff4481da3d29b3f624d55bc9b5d124
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Mon Jun 24 22:43:30 2019 +0200
+
+    [conv.qual] Fix example for cv-decomposition.
+
+    After CWG2051, a cv-decomposition can also be a no-op.
+
+commit f038d86fb9112b62adaaebaf95dc70d786412cbd
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Fri Jun 28 16:50:03 2019 +0200
+
+    [res.on.functions] Properly capitalize full-sentence bullets.
+
+    Also add periods at the end of sentences.
+
+commit 1be069efaa41f4df376364290f8069ec030b13cc
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Fri Jun 28 17:11:44 2019 +0200
+
+    [time.parse] Fix description of %Ex and %EX parse flags.
+
+    Also refer to the table number instead of 'the table below'.
+
+commit 06bd4b02febcb43c014ffd46b7a07dab8d66aa4b
+Author: onihusube <44743040+onihusube@users.noreply.github.com>
+Date:   Mon Jul 1 16:41:33 2019 +0900
+
+    [cpp.module] fix sample code comment
+
+commit 4c3b9f50ecd230263974c81e1df2fb07b541c58d
+Author: onihusube <44743040+onihusube@users.noreply.github.com>
+Date:   Mon Jul 1 16:26:16 2019 +0900
+
+    [module.global] fix sample code comment
+
+commit 557cfa9dd706780fb672bfe9e5e2f0ef3b2f3d4a
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Thu Jul 4 09:31:57 2019 +0200
+
+    [basic.life] Lifetime of class objects is treated uniformly
+
+    under CWG2256, regardless of triviality of the destructor.
+
+commit d4c4cc0ac037c51ec10cf6f7c80d8c761b517cba
+Author: onihusube <44743040+onihusube@users.noreply.github.com>
+Date:   Wed Jul 17 22:46:24 2019 +0900
+
+    [basic.lookup.argdep]/5 add export to apply()
+
+    fix #2968
+
+commit cc421307fb4ce393e7ab1dcf0d0f1298d163fbe0
+Author: Yehezkel Bernat <yehezkelshb@gmail.com>
+Date:   Sun Jul 21 22:16:23 2019 +0300
+
+    Delete irrelevant copy-paste from previous section
+
+commit 7e02aa3d7d3e5e9dfc2c66451e112d40f4491465
+Author: Jonathan Wakely <cxx@kayari.org>
+Date:   Mon Jul 22 23:27:57 2019 +0100
+
+    [is.sorted] Add missing "return" and semi-colon
+
+    This was lost when changing "Returns:" to "Effects:" for P0896R4. The
+    paper included this change, but it was lost when applying it.
+
+commit a374c4f3664cf84a4440feb3c236076b25cfe736
+Author: languagelawyer <38548419+languagelawyer@users.noreply.github.com>
+Date:   Thu Jul 25 21:24:06 2019 +0200
+
+    [tuple] Use "objects" instead of "variables"
+
+    with "temporary" in the definition of `forward_as_tuple`
+
+commit ee234abfbfa7deb5c585b67590205e1660df180f
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Thu Aug 1 16:45:51 2019 +0200
+
+    [time.clock,bit.cast] Replace template<typename...> with template<class...>
+
+    as per library specification policy.
+
+commit 54a87d7849e7d5283c2d0a34f8200ef6a67bb0da
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Tue Aug 6 23:17:24 2019 +0200
+
+    [conv.qual,expr.static.cast] Harmonize notes on cv-qualified function types.
+
+commit e2a070f7a5484e272c10e4ab31359fede5ff24a1
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Tue Aug 6 13:51:24 2019 -0700
+
+    [diff.cpp17.library], [tab:headers.cpp] Add missing <coroutine> entry
+    to the list of headers, and add various missing entries to the list of
+    new-in-C++20 headers.
+
+    Fixes #3122.
+
+commit fbb0691134e39059adaa4a886e7d746b0e56c81c
+Author: Dawn Perchik <dperchik@embarcadero.com>
+Date:   Wed Jul 31 12:52:26 2019 -0700
+
+    [concepts] Renamed concepts' section names to remove trailing prepositions for consistency.
+
+    * concept.convertibleto => concept.convertible
+    * concept.derivedfrom => concept.derived
+    * concept.stricttotallyordered => concept.totallyordered
+
+commit 7beed51f4388074f46fd55a7c5f559cd82b7c40c
+Author: Dawn Perchik <dperchik@embarcadero.com>
+Date:   Tue Jul 30 20:36:34 2019 -0700
+
+    [alg.is.permutation] Add parameters to \libconcept{sized_sentinel_for} as suggested in PR #3099.
+
+commit 1f2669e287959ce650ffcafb1d413ef6ea084253
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Tue Aug 6 17:21:06 2019 -0700
+
+    [everywhere] Rename exposition-only concept 'same-impl' to 'same-as-impl'.
+
+commit 731832237195a5d2dff8f6185efcd0525198da64
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Tue Aug 6 16:55:09 2019 -0700
+
+    [everywhere] Rename exposition-only concept 'Advanceable' to 'advanceable'.
+
+commit 5c00353357befbb92b93d03c9b3d8d96c0a5c3fc
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Tue Aug 6 16:54:14 2019 -0700
+
+    [everywhere] Rename exposition-only concept 'Decrementable' to 'decrementable'.
+
+commit 80324ff7385730b04089bf4c4f654e5d5617abd0
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Tue Aug 6 16:48:25 2019 -0700
+
+    [expr.new], [uninitialized.copy], [uninitialized_move], [memory.syn]
+    Rename non-normative names that collide with new concept names.
+
+commit 06ab7ebef8a763e36f87f504ed7765528aa25fc7
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Tue Aug 6 02:28:42 2019 -0700
+
+    [support.srcloc.cons] Use term "default member initialier" rather than
+    describing it indirectly.
+
+commit 7f4e95e3296b31c23bfb358f31294d384a955e3b
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Sat Aug 3 08:38:34 2019 +0200
+
+    [support.srcloc] Fix comments in example.
+
+commit cf1bc270c0e7d7b1670502c69268b0373bbf9799
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Tue Aug 6 01:35:47 2019 -0700
+
+    [thread] Update headings, comments, and line wrapping to match editorial
+    conventions.
+
+commit 7698c3dc28251540b4a4733cc4a6b3f6942f13ed
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Tue Aug 6 00:40:47 2019 -0700
+
+    [range.iota.view] Rename IOTA_DIFF_T to the preferred IOTA-DIFF-T.
+
+commit f0256ab73cd6a9fae611af95526d16fe59968d4c
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Mon Aug 5 23:08:59 2019 -0700
+
+    [range.drop.view] Fix typo "requirement" -> "required".
+
+commit a0b5a70fade22203ebfbaeb4828e0c304b1f62ab
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Mon Aug 5 23:02:38 2019 -0700
+
+    [ranges] Fix 'constexpr friend' to our preferred order 'friend constexpr'.
+
+commit e02aa79ca43de3fdf6e1887d4fd02bc58874e190
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Wed Jul 31 22:55:50 2019 +0200
+
+    [range.istream.view] Do not repeat declaration of function istream_view
+    [range.elements.iterator] Renamed from [range.elements_view.iterator]
+    [range.elements.iterator] Use local typedef difference_type
+    [range.elements.iterator] Use reference return type for compound assignment
+
+commit 906fd4d0519994e06659ce066c8252df186c23b9
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Mon Aug 5 17:57:35 2019 -0700
+
+    [func.require] Convert restrictive 'which' to 'that'.
+
+commit b4a8b798e00bce697af9b477a214828b69e9e383
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Mon Aug 5 17:31:21 2019 -0700
+
+    [module.unit] Add "either" to clarify that we're talking about
+    module-names containing a reserved identifier, not module names starting
+    with an identifier that contains a reserved identifier.
+
+commit 26f7cd6d3b2d271c74e1d2022f972f833de940f6
+Author: Dawn Perchik <dperchik@embarcadero.com>
+Date:   Thu Aug 1 13:35:42 2019 -0700
+
+    [stringbuf.members] Minor fixes to P0408R7 wording.
+
+    "str()" should be "str"; we're talking about all str member functions here.
+    Add comma after "For efficiency reasons".
+    "i.e." -> "e.g." since we're describing an example case.
+
+commit ad685c42b18103ace094b375a4fde1a7ec6aba02
+Author: Dawn Perchik <dperchik@embarcadero.com>
+Date:   Tue Jul 30 19:33:10 2019 -0700
+
+    [stringbuf] Name string parameters "s" instead of "str" for consistency and to avoid confusion with "str" methods.
+
+commit 90f64792ec7d5372a093d3bea69dffff2f7af28a
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Mon Aug 5 13:48:59 2019 -0700
+
+    Rename _s to -s in placeholder names per editorial guidelines.
+
+commit 584a87ec1d48862b9e68a269d0a5eb7b05d6999d
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Mon Aug 5 13:57:50 2019 -0700
+
+    [time.hms.nonmembers] Fix editorial error in hh_mm_ss operator<< (only
+    stream to 'os' once). This formulation was proposed by Howard Hinnant
+    on the lib reflector.
+
+commit 1a37c22bb6b621f14d01b4e16378c9cd08724183
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Sun Aug 4 23:36:25 2019 -0700
+
+    [time.hms.nonmembers] Finish rebase on std::format: rewrite hh_mm_ss
+    operator<< in terms of format rather than using (removed) old formatting
+    terminology.
+
+commit 2e82327045fb92d89dd1431cc7e771da63c982dc
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Thu Aug 1 10:37:25 2019 +0200
+
+    [time.hms.members] Rephrased note.
+    [time.hms.overview] Removed redundant declaration of operator<<.
+    [time.hms.overview] Moved exposition-only data members to the bottom.
+
+commit 3d3f16f99454d3ffffcfbf92a02b9bcaac9b375b
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Sun Aug 4 21:50:27 2019 -0700
+
+    [thread.barrier.class] Rename constructor parameter from `phase_count`
+    to `expected`.
+
+    The parameter is not a phase count, and is referred to by other
+    normative wording as `expected`; also, `expected` is the name we use for
+    the same parameter in the constructor of `latch`.
+
+commit dc61857d3779253c6cdeec572cdcb43077b0ce86
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Sun Aug 4 20:51:47 2019 -0700
+
+    [atomics.lockfree] "are" -> "is"; "along with" is not a coordinating
+    conjunction.
+
+commit 3f761c76b5daf9f1a75695226514c323ba6619f0
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Thu Aug 1 10:50:09 2019 +0200
+
+    [numbers.syn] Use 'namespace std::numbers'.
+
+commit 14aa4ed0d323c163f0559bd7c8555d77f2dc8093
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Tue Jul 30 16:12:59 2019 +0200
+
+    [math.constants] Expand 'math' to 'mathematical'.
+
+commit c7ada4d28ae7be82ef64104617e216fd738a4d0f
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Tue Jul 30 16:07:16 2019 +0200
+
+    [numbers] Use 'template<class T>', not 'typename'.
+
+commit 895f30bd225d050bcb2ab9f0a793af9865dcd513
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Sun Aug 4 20:02:33 2019 -0700
+
+    [format.formatter] Reorder Formatter requirements before the
+    descriptions of specializations that meet those requirements.
+
+commit b6454e39ede7ab11ce0958fa2ee3b487c8983ae1
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Sun Aug 4 15:32:02 2019 -0700
+
+    [format.string] Further clarify description of cases where formatting is
+    described in terms of a call to to_chars.
+
+commit f430bec8e7a4437b69d1ad31b2c1f4246e753770
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Sun Aug 4 15:09:26 2019 -0700
+
+    [format.string.std] Convert normative duplication to a note to avoid
+    creating the impression that alignment is only applied to non-string
+    types.
+
+commit e30b8a69d485b96ddacfa31b7eb411c5a64d83a5
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Sun Aug 4 14:23:48 2019 -0700
+
+    [format.string] Separate out the general (type-independent) description
+    of formatting from the format specifiers for arithmetic and string
+    types, and make the presentation of the latter consistent with the
+    presentation for chrono types.
+
+commit d17fd4d5f10f6af87654fdc73bd6417313a295f2
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Sun Aug 4 14:04:04 2019 -0700
+
+    [format.string] Avoid duplicating the specification of '#' for integers.
+
+    Fix the specification for '#' being different for octal integers in the
+    two places it's specified.
+
+commit a870403a2dc47924e7f607f7c69694291d43007c
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Sat Aug 3 20:39:06 2019 -0700
+
+    [format.arg] Don't use placeholder name for private member char-type.
+
+commit 46622695da52f8080f7280207eecd93bd950cc1a
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Sat Aug 3 19:57:13 2019 -0700
+
+    [format.functions] Use clamp rather than min(max(a,b),c)
+
+    Co-Authored-By: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
+
+commit 19d21c3940d33912f1daedee0f14c0f931e389c6
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Thu Aug 1 18:20:08 2019 -0700
+
+    [format.string] Fix whitespace collapse in format alignment example.
+
+commit ed00761315546c11b48441e1bcef6aa5927f76c8
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Thu Aug 1 18:17:10 2019 -0700
+
+    [format.string] Explicitly list all the possible formatting types for
+    bool and charT in their respective tables rather than requiring the
+    reader to infer how to merge the integer table into the bool and charT
+    tables.
+
+commit 3ced91d524f3c2a850243863440151735276b38a
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Wed Jul 31 18:41:56 2019 -0700
+
+    [format.context] Add specification of wformat_context analogous to that
+    of format_context, as discussed on lib reflector.
+
+commit d529b96f3be22332d4a88de646f56cb636680f6c
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Wed Jul 31 18:33:05 2019 -0700
+
+    [format.string] Make tone of wording more formal and less tutorialesque.
+
+commit 5a32fd1040b8a7c4c997ba8841c4f28a34a6c97d
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Wed Jul 31 18:26:41 2019 -0700
+
+    [format.string] Add missing grammar definition for custom-format-spec
+    rather than leaving it dangling.
+
+commit 2db4bd64f7f157266ae0f7c7c44c4fe7c68c6070
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Wed Jul 31 18:14:56 2019 -0700
+
+    [format.string] Fix wording that talks about omitting arg-ids but
+    presupposes that they are all present to instead specify what happens
+    when some or all are absent.
+
+commit b62dc39c0541a1968ac1717773574f4ef868934c
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Wed Jul 31 18:05:00 2019 -0700
+
+    [format.string] Change 'integer' grammar to be left-recursive and factor
+    out separate positive-integer and nonnegative-integer productions for
+    clarity.
+
+commit eae84a0a10b4409da01ae5c9e7c734e113973cdf
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Wed Jul 31 17:34:37 2019 -0700
+
+    [format.string] Clarify that "other characters" means "characters other
+    than { and }".
+
+commit fb97956bc9eee5a50c10df9148d9422e260e352c
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Wed Jul 31 17:28:28 2019 -0700
+
+    [format.formatter] Add subclause heading to avoid hanging paragraphs.
+
+commit 796c871f9b14a42fea634ec97a35032bfe3c422a
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Tue Jul 23 09:57:04 2019 +0200
+
+    [bit] Avoid std::numeric_limits<...>
+
+    Referring to numeric_limits (without std:: prefix) is sufficient.
+
+commit 4a657ca3e26850a993c2015bbecd6287e817a615
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Sat Aug 3 18:51:09 2019 -0700
+
+    [iterator.concept.sizedsentinel], [range.sized], [range.view]
+    Provide proper descriptions for disable_sized_sentinel,
+    disable_sized_range, and enable_view.
+
+commit b3b7d37c073051826c21c231bd386c10d64433dc
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Fri Aug 2 22:09:14 2019 +0200
+
+    [class.copy.elision] Add cross-reference, fix example.
+
+commit 6552c03d3793e7532793097d760edc3a93e150b1
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Fri Aug 2 17:32:40 2019 -0700
+
+    [over.match.class.deduct] Put all bullets describing the properties of
+    f' at the same depth, and guard them all by the condition that we're
+    actually adding an f' to the set of guides.
+
+commit 7226ced32fe3cda28eb05f044985427684397128
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Fri Aug 2 17:26:53 2019 -0700
+
+    [over.match.class.deduct] Switch from imperative to passive, and clarify
+    what happens if the various 'if' conditions are not met.
+
+commit 6e845457bfd83f20c2f61bf4015afcd96cbd0cec
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Fri Aug 2 17:17:52 2019 -0700
+
+    [over.match.class.deduct] Fix failure to handle the case where a
+    deducible alias template's defining-type-id contains a
+    nested-name-specifier (or 'typename' or 'template' keywords).
+
+commit 813a4300a036f12d5ff6b82965b83a8e87b1ae8d
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Fri Aug 2 16:55:56 2019 -0700
+
+    [dcl.attr.nodiscard] Fix vexing-parse bug in example. Make sure the
+    missiles actually get launched, not merely redeclared.
+
+commit f10e3751b39138746b601fa702c9ed9e67777c96
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Fri Aug 2 15:59:50 2019 -0700
+
+    [over.ics.rank] Reorder examples to match order of normative text.
+
+commit 47539b965a84f69c548fe043a632af17db3cb315
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Fri Aug 2 15:49:39 2019 -0700
+
+    [conv.qual] Move note after the rule that implies it.
+
+commit c0c589881759871b2183105f315d4ddd0d2734be
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Thu Aug 1 22:47:19 2019 +0200
+
+    [expr.const.cast] Clarify pairwise correspondence for P_i.
+    [over.ics.rank] Move cross-reference pointing to [conv.qual].
+
+commit 1fbc1c315008152770eea8bd383aa2a4fa47cfd5
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Fri Jul 26 16:56:13 2019 +0200
+
+    [basic.def.odr] Turn long comma-separate list into bullets.
+
+commit 5d1bb1c7f8ed44016c38bfeb9797e363d52cfc51
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Thu Aug 1 20:42:13 2019 -0700
+
+    [over.match.oper] Replace "member, non-member, and built-in candidates"
+    with "non-rewritten candidates"
+
+    This simplifies the wording, implicitly explains why we're considering
+    only some candidates, and avoids overtly suggesting that we could ever
+    pick a reversed-parameter-order built-in candidate.
+
+commit 46ba985402de963f50d364b26b594707be16c7c9
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Mon Jul 22 04:42:43 2019 +0200
+
+    [dcl.enum] Avoid hanging paragraphs by moving "Enumeration declarations"
+    down one level to a sibling of "The using enum declaration".
+
+    [namespace.udir] Rename section to "Using namespace directive" to
+    further distinguish this from a using enum declaration.
+
+commit d6a291776858bc647fc6826888767284f305c799
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Mon Jul 22 03:58:34 2019 +0200
+
+    [dcl.attr.nodiscard] Simplify note describing the string-literal in a
+    nodiscard attribute and make it less confusing.
+
+commit dc45e8c329eeb0076d074fa671c2be2fc605555a
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Mon Jul 22 03:18:33 2019 +0200
+
+    [class.spaceship] Remove incorrect note.
+
+commit 6bd3daeae3a3e9ae6174c35ab020dbfe4504b75b
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Thu Aug 1 20:04:36 2019 -0700
+
+    [class.ctor], [class.dtor] Introduce actual definitions for
+    "constructor" and "prospective destructor".
+
+commit 94a72b5c11a20cfd6c92a4faa5bd0df4b8ebc620
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Mon Jul 22 02:28:15 2019 +0200
+
+    [class.dtor] Reorder the introduction of an implicit prospective
+    destructor to before we describe the overload resolution to pick the
+    actual destructor.
+
+commit 98c2c56ab5e945452586270d72d2fb606b71cd94
+Author: Richard Smith <richard@metafoo.co.uk>
+Date:   Mon Jul 22 02:24:42 2019 +0200
+
+    [class.prop] [special] Move definition of eligible special member
+    functions to the section on special member functions.
+
+commit 67db9422b6bc58f5399c7c019ec5ede28d8ac4f5
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Fri Jun 28 17:01:54 2019 +0200
+
+    [expr.prim.req] Fix cross-reference for substituting into constraints.
+
+commit 51c5b01217799fdfa754179c20af888ec8c1889d
+Author: Casey Carter <Casey@Carter.net>
+Date:   Wed Jul 10 00:40:19 2019 -0700
+
+    [temp.constr.order] Remove extraneous "the". (#2964)
+
+commit 4f9942cafadc17fb902610b4c67afb6fcf81ff64
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Sun Jul 7 19:38:20 2019 +0200
+
+    [dcl.asm] Rename grammar term 'asm-definition' to 'asm-declaration'
+
+commit c635711cdd81346ad41c7861adb8035176fa236f
+Author: Eelis <github.com@contacts.eelis.net>
+Date:   Fri Jul 5 23:55:22 2019 +0200
+
+    [temp.constr.constr] Add missing period at end of sentence. (#2957)
+
+commit 72cc844ef44ae47aebb1ad346146138d3279be9e
+Author: Eelis <github.com@contacts.eelis.net>
+Date:   Fri Jul 5 16:16:58 2019 +0200
+
+    [expr.reinterpret.cast] Properly capitalize full-sentence bullets. (#2956)
+
+commit f54f306c3b9fad27e70766963840e3df14f20b28
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Thu Jul 4 15:34:38 2019 +0200
+
+    [func.bind] Remove bogus 'shall's. (#2955)
+
+commit da7eac5e621b5fab12c0b1992100c4bfd983ed8e
+Author: Saar Raz <saar@raz.email>
+Date:   Mon Jul 1 22:46:37 2019 +0300
+
+    [Concepts] Remove qualified-concept-name reference
+
+    Update 'qualified-concept-name' (the previous incarnation of 'type-constraint') reference to 'type-constraint' in [temp.over.link]p6.
+
+commit 97b615a5a6ab0598b624ee05402c531d0421cff6
+Author: Casey Carter <Casey@Carter.net>
+Date:   Tue Jun 25 06:09:55 2019 -0700
+
+    [iterator.synopsis] Copy constraint for iterator_traits<T*> from [iterator.traits]/5 (#2943)
+
+commit 44ea29778d15cd5d9f2b5c706c6b3f4338548ec2
+Author: Casey Carter <Casey@Carter.net>
+Date:   Tue Jun 25 06:04:14 2019 -0700
+
+    [range.filter.sentinel] Correct typo in constructor Effects (#2937)
+
diff --git a/papers/n4827.md b/papers/n4827.md new file mode 100644 index 0000000000..a421048b2a --- /dev/null +++ b/papers/n4827.md @@ -0,0 +1,827 @@ +# N4827 Editors' Report -- Programming Languages -- C++ + +2019-08-06 +Richard Smith (editor) (Google Inc) +Thomas Köppe (co-editor) (Google DeepMind) +Jens Maurer (co-editor) +Dawn Perchik (co-editor) (Bright Side Computing, LLC) +`` + +## Acknowledgements + +Special thanks to several paper authors +for supplying the LaTeX sources for their papers. + +Thanks to all those who have [submitted editorial +issues](https://github.com/cplusplus/draft/wiki/How-to-submit-an-editorial-issue) +and to those who have provided pull requests with fixes. + +## New papers + + * [N4828](http://wg21.link/n4828) is the committee draft for C++20. It replaces [N4820](http://wg21.link/n4820). + * N4827 is this Editors' Report. + +## Motions incorporated into working draft + +### Core working group motions + +CWG motion 1: [Core issue resolutions](http://wg21.link/p1510r0) for 10 issues in "tentatively ready" status applied: **(DR)** + + * [682](http://wg21.link/cwg682) Missing description of lookup of template aliases + * [2207](http://wg21.link/cwg2207) Alignment of allocation function return value + * [2300](http://wg21.link/cwg2300) Lambdas in multiple definitions + * [2366](http://wg21.link/cwg2366) Can default initialization be constant initialization? + * [2376](http://wg21.link/cwg2376) Class template argument deduction with array declarator + * [2390](http://wg21.link/cwg2390) Is the argument of `__has_cpp_attribute` macro-expanded? + * [2400](http://wg21.link/cwg2400) Constexpr virtual functions and temporary objects + * [2404](http://wg21.link/cwg2404) `[[no_unique_address]]` and allocation order + * [2406](http://wg21.link/cwg2406) `[[fallthrough]]` attribute and iteration statements + * [2418](http://wg21.link/cwg2418) Missing cases in definition of "usable in constant expressions" + +CWG motion 2: [P1161R3 "Deprecate uses of the comma operator in subscripting expressions"](http://wg21.link/p1161r3) + +CWG motion 3: [P1331R2 "Permitting trivial default initialization in constexpr contexts"](http://wg21.link/p1331r2) + +CWG motion 4: [P0735R1 "Interaction of `memory_order_consume` with release sequences"](http://wg21.link/p0735r1) + +CWG motion 5: [P0848R3 "Conditionally trivial special member functions"](http://wg21.link/p0848r3) + +CWG motion 6: [P1186R3 "When do you actually use `<=>`?"](http://wg21.link/p1186r3) + +CWG motion 7: [P1301R4 "`[[nodiscard("should have a reason")]]`"](http://wg21.link/p1301r4) + +CWG motion 8: [P1099R5 "`using enum`"](http://wg21.link/p1099r5) + +CWG motion 9: [P1630R1 "Spaceship needs a tune-up"](http://wg21.link/p1630r1) + +CWG motion 10: [P1616R1 "Using unconstrained template template parameters with constrained templates"](http://wg21.link/p1616r1) + +CWG motion 11: [P1816R0 "Class template argument deduction for aggregates"](http://wg21.link/p1816r0) + +CWG motion 12: [P1668R1 "Enabling `constexpr` intrinsics by permitting unevaluated inline assembly in `constexpr` functions"](http://wg21.link/p1668r1) + +CWG motion 13: [P1766R1 "Mitigating minor modules maladies"](http://wg21.link/p1766r1)and accept the changes therein for default arguments and classes having typedef names for linkage purposes as Defect Reports. + +CWG motion 14: [P1811R0 "Relaxing redefinition restrictions for re-exportation robustness"](http://wg21.link/p1811r0) + +CWG motion 15: [P0388R4 "Permit conversions to arrays of unknown bound"](http://wg21.link/p0388r4) + +CWG motion 16: [P1823R0 "Remove contracts"](http://wg21.link/p1823r0) + +CWG motion 17: [P1143R2 "Adding the `constinit` keyword"](http://wg21.link/p1143r2) + +CWG motion 18: [P1452R2 "On the non-uniform semantics of *return-type-requirement*s"](http://wg21.link/p1452r2) + +CWG motion 19: [P1152R4 "Deprecating `volatile`"](http://wg21.link/p1152r4) + +CWG motion 20: [P1771R1 "`[[nodiscard]]` for constructors"](http://wg21.link/p1771r1) **(DR)** + +CWG motion 21: [P1814R0 "Class template argument deduction for alias templates"](http://wg21.link/p1814r0) + +CWG motion 22 was withdrawn + +CWG motion 23: [P1825R0 "Merged wording for P0527R1 and P1155R3"](http://wg21.link/p1825r0) **(DR)** + + * [P0527R1 "Implicitly move from rvalue references in return statements"](http://wg21.link/p0527r1) + * [P1155R3 "More implicit moves"](http://wg21.link/p1155r3) + +CWG motion 24: [P1703R1 "Recognizing header unit imports requires full preprocessing"](http://wg21.link/p1703r1) + +CWG motion 25: [P0784R7 "More `constexpr` containers"](http://wg21.link/p0784r7) + +### Library working group motions + +LWG motion 1: [Library issue resolutions](http://wg21.link/p1724r0) for 17 issues in "Ready" and "Tentatively Ready" status applied: **(DR)** + + * [3209](http://wg21.link/lwg3209) Expression in `year::ok()` returns clause is ill-formed + * [3208](http://wg21.link/lwg3208) `Boolean`'s expression requirements are ordered inconsistently + * [3206](http://wg21.link/lwg3206) `year_month_day` conversion to `sys_days` uses not-existing member function + * [3202](http://wg21.link/lwg3202) [P0318R1](http://wg21.link/p0318r1) was supposed to be revised + * [3199](http://wg21.link/lwg3199) `istream >> bitset<0>` fails + * [3198](http://wg21.link/lwg3198) Bad constraint on `std::span::span()` + * [3196](http://wg21.link/lwg3196) `std::optional` is ill-formed if `T` is an array + * [3191](http://wg21.link/lwg3191) `std::ranges::shuffle` synopsis does not match algorithm definition + * [3187](http://wg21.link/lwg3187) [P0591R4](http://wg21.link/p0591r4) reverted [DR 2586](http://wg21.link/lwg2586) fixes to `scoped_allocator_adaptor::construct()` + * [3186](http://wg21.link/lwg3186) Ranges `remove`, `partition`, and `partial_sort_copy` algorithms discard useful information + * [3185](http://wg21.link/lwg3185) Uses-allocator construction functions missing `constexpr` and `noexcept` + * [3184](http://wg21.link/lwg3184) Inconsistencies in `bind_front` wording + * [3183](http://wg21.link/lwg3183) Normative permission to specialize ranges variable templates + * [3169](http://wg21.link/lwg3169) Ranges permutation generators discard useful information + * [3158](http://wg21.link/lwg3158) `tuple(allocator_arg_t, const Alloc&)` should be conditionally explicit + * [3055](http://wg21.link/lwg3055) `path::operator+=(`single-character`)` misspecified + * [2899](http://wg21.link/lwg2899) `is_(nothrow_)move_constructible` and `tuple`, `optional` and `unique_ptr` + +LWG motion 2: [P1355R2 "Exposing a narrow contract for `ceil2`"](http://wg21.link/p1355r2) + +LWG motion 3: [P0553R4 "Bit operations"](http://wg21.link/p0553r4) + +LWG motion 4: [P1424R1 "`constexpr` feature macro concerns"](http://wg21.link/p1424r1) + +LWG motion 5: [P0645R10 "Text formatting"](http://wg21.link/p0645r10) + +LWG motion 6: [P1361R2 "Integration of chrono with text formatting"](http://wg21.link/p1361r2) + +LWG motion 7: [P1652R1 "Printf corner cases in `std::format`"](http://wg21.link/p1652r1) + +LWG motion 8: [P0631R8 "Math constants"](http://wg21.link/p0631r8) + +LWG motion 9: Synchronization library: + + * [P1135R6 "The C++20 synchronization library"](http://wg21.link/p1135r6) + * [P1643R1 "Add wait/notify to `atomic_ref`"](http://wg21.link/p1643r1) + * [P1644R0 "Add wait/notify to `atomic`"](http://wg21.link/p1644r0) + +LWG motion 10: [P1466R3 "Miscellaneous minor fixes for chrono"](http://wg21.link/p1466r3) + +LWG motion 11: [P1754R1 "Rename concepts to `standard_case` for C++20, while we still can"](http://wg21.link/p1754r1) + +LWG motion 12: [P1614R2 "The mothership has landed"](http://wg21.link/p1614r2) + +LWG motion 13: [P0325R4 "`to_array` from LFTS with updates"](http://wg21.link/p0325r4) + +LWG motion 14: [P0408R7 "Efficient access to `basic_stringbuf`'s buffer"](http://wg21.link/p0408r7) + +LWG motion 15: [P1423R3 "`char8_t` backward compatibility remediation"](http://wg21.link/p1423r3) + +LWG motion 16: [P1502R1 "Standard library header units"](http://wg21.link/p1502r1) + +LWG motion 17: [P1612R1 "Relocate `endian`'s specification"](http://wg21.link/p1612r1) + +LWG motion 18: [P1661R1 "Remove dedicated precalculated hash lookup interface"](http://wg21.link/p1661r1) + +LWG motion 19: [P1650R0 "Output `std::chrono::days` with `d` suffix"](http://wg21.link/p1650r0) + +LWG motion 20: [P1651R0 "`bind_front` should not unwrap `reference_wrapper`"](http://wg21.link/p1651r0) + +LWG motion 21: [P1065R2 "Constexpr `invoke`"](http://wg21.link/p1065r2) + +LWG motion 22: [P1207R4 "Movability of single-pass iterators"](http://wg21.link/p1207r4) + +LWG motion 23: [P1035R7 "Input range adaptors"](http://wg21.link/p1035r7) + +LWG motion 24: [P1638R1 "`basic_istream_view::iterator` should not be copyable"](http://wg21.link/p1638r1) + +LWG motion 25: [P1522R1 "Iterator difference type and integer overflow"](http://wg21.link/p1522r1) + +LWG motion 26: [P1004R2 "Making `std::vector` constexpr"](http://wg21.link/p1004r2) + +LWG motion 27: [P0980R1 "Making `std::string` constexpr"](http://wg21.link/p0980r1) + +LWG motion 28: [P0660R10 "Stop token and joining thread"](http://wg21.link/p0660r10) + +LWG motion 29: [P1474R1 "Helpful pointers for `ContiguousIterator`"](http://wg21.link/p1474r1) + +LWG motion 30: [P1523R1 "Views and size types"](http://wg21.link/p1523r1) + +LWG motion 31: [P0466R5 "Layout-compatibility and pointer-interconvertibility traits"](http://wg21.link/p0466r5) + +LWG motion 32: [P1208R6 "`source_location`"](http://wg21.link/p1208r6) + +## Notable editorial changes + +### LWG motions 5-7 + +The new `std::format` library underwent substantial editorial rework +for clarity and precision. +Thanks to Tomasz Kamiński and +Johel Ernesto Guerrero Peña +for reviewing the resulting edits, +and to Victor Zverovich for responding to various questions about intent. + +### LWG motion 10 + +The `operator<<` added for `hh_mm_ss` was written in terms of +the old chrono formatting machinery that was replaced by +`std::format`-based machinery by LWG motion 6. +It has been rephrased in terms of `std::format`. +Thanks to Howard Hinnant for providing wording. + +### LWG motion 11 + +In addition to the requested renames, the following concepts were also renamed, +following the editorial instructions to rename all other concepts: + + * `ThreeWayComparableWith` -> `three_way_comparable_with` + * `ThreeWayComparable` -> `three_way_comparable` + * `ForwardRange` -> `forward_range` + +### LWG motion 26, 27 + +These motions would have added `constexpr` to +`operator<`, `operator>`, `operator<=`, `operator>=`, and `operator!=` functions +that LWG motion 12 removed. +Instead `constexpr` was added to the replacement `operator<=>`. + +### Section label changes + +Several section labels introduced by the motions papers have been modified +to match our style guide. In addition to the section labels affected by the +above motions, the following section labels have been renamed: + + * [concept.convertibleto] => [concept.convertible] + * [concept.derivedfrom] => [concept.derived] + * [concept.stricttotallyordered] => [concept.totallyordered] + +## Minor editorial fixes + +A log of editorial fixes made to the working draft since N4820 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](https://github.com/cplusplus/draft/compare/n4820...n4828). + + commit 915031ddbf75f856efcea43928d9f459140834fd + Author: Jens Maurer + Date: Tue Aug 6 09:31:52 2019 +0200 + + [meta.trans.other] Use hyphens, not underscores, for meta-functions. + + commit 43945886b4ff4481da3d29b3f624d55bc9b5d124 + Author: Jens Maurer + Date: Mon Jun 24 22:43:30 2019 +0200 + + [conv.qual] Fix example for cv-decomposition. + + After CWG2051, a cv-decomposition can also be a no-op. + + commit f038d86fb9112b62adaaebaf95dc70d786412cbd + Author: Jens Maurer + Date: Fri Jun 28 16:50:03 2019 +0200 + + [res.on.functions] Properly capitalize full-sentence bullets. + + Also add periods at the end of sentences. + + commit 1be069efaa41f4df376364290f8069ec030b13cc + Author: Jens Maurer + Date: Fri Jun 28 17:11:44 2019 +0200 + + [time.parse] Fix description of %Ex and %EX parse flags. + + Also refer to the table number instead of 'the table below'. + + commit 06bd4b02febcb43c014ffd46b7a07dab8d66aa4b + Author: onihusube <44743040+onihusube@users.noreply.github.com> + Date: Mon Jul 1 16:41:33 2019 +0900 + + [cpp.module] fix sample code comment + + commit 4c3b9f50ecd230263974c81e1df2fb07b541c58d + Author: onihusube <44743040+onihusube@users.noreply.github.com> + Date: Mon Jul 1 16:26:16 2019 +0900 + + [module.global] fix sample code comment + + commit 557cfa9dd706780fb672bfe9e5e2f0ef3b2f3d4a + Author: Jens Maurer + Date: Thu Jul 4 09:31:57 2019 +0200 + + [basic.life] Lifetime of class objects is treated uniformly + + under CWG2256, regardless of triviality of the destructor. + + commit d4c4cc0ac037c51ec10cf6f7c80d8c761b517cba + Author: onihusube <44743040+onihusube@users.noreply.github.com> + Date: Wed Jul 17 22:46:24 2019 +0900 + + [basic.lookup.argdep]/5 add export to apply() + + fix #2968 + + commit cc421307fb4ce393e7ab1dcf0d0f1298d163fbe0 + Author: Yehezkel Bernat + Date: Sun Jul 21 22:16:23 2019 +0300 + + Delete irrelevant copy-paste from previous section + + commit 7e02aa3d7d3e5e9dfc2c66451e112d40f4491465 + Author: Jonathan Wakely + Date: Mon Jul 22 23:27:57 2019 +0100 + + [is.sorted] Add missing "return" and semi-colon + + This was lost when changing "Returns:" to "Effects:" for P0896R4. The + paper included this change, but it was lost when applying it. + + commit a374c4f3664cf84a4440feb3c236076b25cfe736 + Author: languagelawyer <38548419+languagelawyer@users.noreply.github.com> + Date: Thu Jul 25 21:24:06 2019 +0200 + + [tuple] Use "objects" instead of "variables" + + with "temporary" in the definition of `forward_as_tuple` + + commit ee234abfbfa7deb5c585b67590205e1660df180f + Author: Jens Maurer + Date: Thu Aug 1 16:45:51 2019 +0200 + + [time.clock,bit.cast] Replace template with template + + as per library specification policy. + + commit 54a87d7849e7d5283c2d0a34f8200ef6a67bb0da + Author: Jens Maurer + Date: Tue Aug 6 23:17:24 2019 +0200 + + [conv.qual,expr.static.cast] Harmonize notes on cv-qualified function types. + + commit e2a070f7a5484e272c10e4ab31359fede5ff24a1 + Author: Richard Smith + Date: Tue Aug 6 13:51:24 2019 -0700 + + [diff.cpp17.library], [tab:headers.cpp] Add missing entry + to the list of headers, and add various missing entries to the list of + new-in-C++20 headers. + + Fixes #3122. + + commit fbb0691134e39059adaa4a886e7d746b0e56c81c + Author: Dawn Perchik + Date: Wed Jul 31 12:52:26 2019 -0700 + + [concepts] Renamed concepts' section names to remove trailing prepositions for consistency. + + * concept.convertibleto => concept.convertible + * concept.derivedfrom => concept.derived + * concept.stricttotallyordered => concept.totallyordered + + commit 7beed51f4388074f46fd55a7c5f559cd82b7c40c + Author: Dawn Perchik + Date: Tue Jul 30 20:36:34 2019 -0700 + + [alg.is.permutation] Add parameters to \libconcept{sized_sentinel_for} as suggested in PR #3099. + + commit 1f2669e287959ce650ffcafb1d413ef6ea084253 + Author: Richard Smith + Date: Tue Aug 6 17:21:06 2019 -0700 + + [everywhere] Rename exposition-only concept 'same-impl' to 'same-as-impl'. + + commit 731832237195a5d2dff8f6185efcd0525198da64 + Author: Richard Smith + Date: Tue Aug 6 16:55:09 2019 -0700 + + [everywhere] Rename exposition-only concept 'Advanceable' to 'advanceable'. + + commit 5c00353357befbb92b93d03c9b3d8d96c0a5c3fc + Author: Richard Smith + Date: Tue Aug 6 16:54:14 2019 -0700 + + [everywhere] Rename exposition-only concept 'Decrementable' to 'decrementable'. + + commit 80324ff7385730b04089bf4c4f654e5d5617abd0 + Author: Richard Smith + Date: Tue Aug 6 16:48:25 2019 -0700 + + [expr.new], [uninitialized.copy], [uninitialized_move], [memory.syn] + Rename non-normative names that collide with new concept names. + + commit 06ab7ebef8a763e36f87f504ed7765528aa25fc7 + Author: Richard Smith + Date: Tue Aug 6 02:28:42 2019 -0700 + + [support.srcloc.cons] Use term "default member initialier" rather than + describing it indirectly. + + commit 7f4e95e3296b31c23bfb358f31294d384a955e3b + Author: Jens Maurer + Date: Sat Aug 3 08:38:34 2019 +0200 + + [support.srcloc] Fix comments in example. + + commit cf1bc270c0e7d7b1670502c69268b0373bbf9799 + Author: Richard Smith + Date: Tue Aug 6 01:35:47 2019 -0700 + + [thread] Update headings, comments, and line wrapping to match editorial + conventions. + + commit 7698c3dc28251540b4a4733cc4a6b3f6942f13ed + Author: Richard Smith + Date: Tue Aug 6 00:40:47 2019 -0700 + + [range.iota.view] Rename IOTA_DIFF_T to the preferred IOTA-DIFF-T. + + commit f0256ab73cd6a9fae611af95526d16fe59968d4c + Author: Richard Smith + Date: Mon Aug 5 23:08:59 2019 -0700 + + [range.drop.view] Fix typo "requirement" -> "required". + + commit a0b5a70fade22203ebfbaeb4828e0c304b1f62ab + Author: Richard Smith + Date: Mon Aug 5 23:02:38 2019 -0700 + + [ranges] Fix 'constexpr friend' to our preferred order 'friend constexpr'. + + commit e02aa79ca43de3fdf6e1887d4fd02bc58874e190 + Author: Jens Maurer + Date: Wed Jul 31 22:55:50 2019 +0200 + + [range.istream.view] Do not repeat declaration of function istream_view + [range.elements.iterator] Renamed from [range.elements_view.iterator] + [range.elements.iterator] Use local typedef difference_type + [range.elements.iterator] Use reference return type for compound assignment + + commit 906fd4d0519994e06659ce066c8252df186c23b9 + Author: Richard Smith + Date: Mon Aug 5 17:57:35 2019 -0700 + + [func.require] Convert restrictive 'which' to 'that'. + + commit b4a8b798e00bce697af9b477a214828b69e9e383 + Author: Richard Smith + Date: Mon Aug 5 17:31:21 2019 -0700 + + [module.unit] Add "either" to clarify that we're talking about + module-names containing a reserved identifier, not module names starting + with an identifier that contains a reserved identifier. + + commit 26f7cd6d3b2d271c74e1d2022f972f833de940f6 + Author: Dawn Perchik + Date: Thu Aug 1 13:35:42 2019 -0700 + + [stringbuf.members] Minor fixes to P0408R7 wording. + + "str()" should be "str"; we're talking about all str member functions here. + Add comma after "For efficiency reasons". + "i.e." -> "e.g." since we're describing an example case. + + commit ad685c42b18103ace094b375a4fde1a7ec6aba02 + Author: Dawn Perchik + Date: Tue Jul 30 19:33:10 2019 -0700 + + [stringbuf] Name string parameters "s" instead of "str" for consistency and to avoid confusion with "str" methods. + + commit 90f64792ec7d5372a093d3bea69dffff2f7af28a + Author: Richard Smith + Date: Mon Aug 5 13:48:59 2019 -0700 + + Rename _s to -s in placeholder names per editorial guidelines. + + commit 584a87ec1d48862b9e68a269d0a5eb7b05d6999d + Author: Richard Smith + Date: Mon Aug 5 13:57:50 2019 -0700 + + [time.hms.nonmembers] Fix editorial error in hh_mm_ss operator<< (only + stream to 'os' once). This formulation was proposed by Howard Hinnant + on the lib reflector. + + commit 1a37c22bb6b621f14d01b4e16378c9cd08724183 + Author: Richard Smith + Date: Sun Aug 4 23:36:25 2019 -0700 + + [time.hms.nonmembers] Finish rebase on std::format: rewrite hh_mm_ss + operator<< in terms of format rather than using (removed) old formatting + terminology. + + commit 2e82327045fb92d89dd1431cc7e771da63c982dc + Author: Jens Maurer + Date: Thu Aug 1 10:37:25 2019 +0200 + + [time.hms.members] Rephrased note. + [time.hms.overview] Removed redundant declaration of operator<<. + [time.hms.overview] Moved exposition-only data members to the bottom. + + commit 3d3f16f99454d3ffffcfbf92a02b9bcaac9b375b + Author: Richard Smith + Date: Sun Aug 4 21:50:27 2019 -0700 + + [thread.barrier.class] Rename constructor parameter from `phase_count` + to `expected`. + + The parameter is not a phase count, and is referred to by other + normative wording as `expected`; also, `expected` is the name we use for + the same parameter in the constructor of `latch`. + + commit dc61857d3779253c6cdeec572cdcb43077b0ce86 + Author: Richard Smith + Date: Sun Aug 4 20:51:47 2019 -0700 + + [atomics.lockfree] "are" -> "is"; "along with" is not a coordinating + conjunction. + + commit 3f761c76b5daf9f1a75695226514c323ba6619f0 + Author: Jens Maurer + Date: Thu Aug 1 10:50:09 2019 +0200 + + [numbers.syn] Use 'namespace std::numbers'. + + commit 14aa4ed0d323c163f0559bd7c8555d77f2dc8093 + Author: Jens Maurer + Date: Tue Jul 30 16:12:59 2019 +0200 + + [math.constants] Expand 'math' to 'mathematical'. + + commit c7ada4d28ae7be82ef64104617e216fd738a4d0f + Author: Jens Maurer + Date: Tue Jul 30 16:07:16 2019 +0200 + + [numbers] Use 'template', not 'typename'. + + commit 895f30bd225d050bcb2ab9f0a793af9865dcd513 + Author: Richard Smith + Date: Sun Aug 4 20:02:33 2019 -0700 + + [format.formatter] Reorder Formatter requirements before the + descriptions of specializations that meet those requirements. + + commit b6454e39ede7ab11ce0958fa2ee3b487c8983ae1 + Author: Richard Smith + Date: Sun Aug 4 15:32:02 2019 -0700 + + [format.string] Further clarify description of cases where formatting is + described in terms of a call to to_chars. + + commit f430bec8e7a4437b69d1ad31b2c1f4246e753770 + Author: Richard Smith + Date: Sun Aug 4 15:09:26 2019 -0700 + + [format.string.std] Convert normative duplication to a note to avoid + creating the impression that alignment is only applied to non-string + types. + + commit e30b8a69d485b96ddacfa31b7eb411c5a64d83a5 + Author: Richard Smith + Date: Sun Aug 4 14:23:48 2019 -0700 + + [format.string] Separate out the general (type-independent) description + of formatting from the format specifiers for arithmetic and string + types, and make the presentation of the latter consistent with the + presentation for chrono types. + + commit d17fd4d5f10f6af87654fdc73bd6417313a295f2 + Author: Richard Smith + Date: Sun Aug 4 14:04:04 2019 -0700 + + [format.string] Avoid duplicating the specification of '#' for integers. + + Fix the specification for '#' being different for octal integers in the + two places it's specified. + + commit a870403a2dc47924e7f607f7c69694291d43007c + Author: Richard Smith + Date: Sat Aug 3 20:39:06 2019 -0700 + + [format.arg] Don't use placeholder name for private member char-type. + + commit 46622695da52f8080f7280207eecd93bd950cc1a + Author: Richard Smith + Date: Sat Aug 3 19:57:13 2019 -0700 + + [format.functions] Use clamp rather than min(max(a,b),c) + + Co-Authored-By: Johel Ernesto Guerrero Peña + + commit 19d21c3940d33912f1daedee0f14c0f931e389c6 + Author: Richard Smith + Date: Thu Aug 1 18:20:08 2019 -0700 + + [format.string] Fix whitespace collapse in format alignment example. + + commit ed00761315546c11b48441e1bcef6aa5927f76c8 + Author: Richard Smith + Date: Thu Aug 1 18:17:10 2019 -0700 + + [format.string] Explicitly list all the possible formatting types for + bool and charT in their respective tables rather than requiring the + reader to infer how to merge the integer table into the bool and charT + tables. + + commit 3ced91d524f3c2a850243863440151735276b38a + Author: Richard Smith + Date: Wed Jul 31 18:41:56 2019 -0700 + + [format.context] Add specification of wformat_context analogous to that + of format_context, as discussed on lib reflector. + + commit d529b96f3be22332d4a88de646f56cb636680f6c + Author: Richard Smith + Date: Wed Jul 31 18:33:05 2019 -0700 + + [format.string] Make tone of wording more formal and less tutorialesque. + + commit 5a32fd1040b8a7c4c997ba8841c4f28a34a6c97d + Author: Richard Smith + Date: Wed Jul 31 18:26:41 2019 -0700 + + [format.string] Add missing grammar definition for custom-format-spec + rather than leaving it dangling. + + commit 2db4bd64f7f157266ae0f7c7c44c4fe7c68c6070 + Author: Richard Smith + Date: Wed Jul 31 18:14:56 2019 -0700 + + [format.string] Fix wording that talks about omitting arg-ids but + presupposes that they are all present to instead specify what happens + when some or all are absent. + + commit b62dc39c0541a1968ac1717773574f4ef868934c + Author: Richard Smith + Date: Wed Jul 31 18:05:00 2019 -0700 + + [format.string] Change 'integer' grammar to be left-recursive and factor + out separate positive-integer and nonnegative-integer productions for + clarity. + + commit eae84a0a10b4409da01ae5c9e7c734e113973cdf + Author: Richard Smith + Date: Wed Jul 31 17:34:37 2019 -0700 + + [format.string] Clarify that "other characters" means "characters other + than { and }". + + commit fb97956bc9eee5a50c10df9148d9422e260e352c + Author: Richard Smith + Date: Wed Jul 31 17:28:28 2019 -0700 + + [format.formatter] Add subclause heading to avoid hanging paragraphs. + + commit 796c871f9b14a42fea634ec97a35032bfe3c422a + Author: Jens Maurer + Date: Tue Jul 23 09:57:04 2019 +0200 + + [bit] Avoid std::numeric_limits<...> + + Referring to numeric_limits (without std:: prefix) is sufficient. + + commit 4a657ca3e26850a993c2015bbecd6287e817a615 + Author: Richard Smith + Date: Sat Aug 3 18:51:09 2019 -0700 + + [iterator.concept.sizedsentinel], [range.sized], [range.view] + Provide proper descriptions for disable_sized_sentinel, + disable_sized_range, and enable_view. + + commit b3b7d37c073051826c21c231bd386c10d64433dc + Author: Jens Maurer + Date: Fri Aug 2 22:09:14 2019 +0200 + + [class.copy.elision] Add cross-reference, fix example. + + commit 6552c03d3793e7532793097d760edc3a93e150b1 + Author: Richard Smith + Date: Fri Aug 2 17:32:40 2019 -0700 + + [over.match.class.deduct] Put all bullets describing the properties of + f' at the same depth, and guard them all by the condition that we're + actually adding an f' to the set of guides. + + commit 7226ced32fe3cda28eb05f044985427684397128 + Author: Richard Smith + Date: Fri Aug 2 17:26:53 2019 -0700 + + [over.match.class.deduct] Switch from imperative to passive, and clarify + what happens if the various 'if' conditions are not met. + + commit 6e845457bfd83f20c2f61bf4015afcd96cbd0cec + Author: Richard Smith + Date: Fri Aug 2 17:17:52 2019 -0700 + + [over.match.class.deduct] Fix failure to handle the case where a + deducible alias template's defining-type-id contains a + nested-name-specifier (or 'typename' or 'template' keywords). + + commit 813a4300a036f12d5ff6b82965b83a8e87b1ae8d + Author: Richard Smith + Date: Fri Aug 2 16:55:56 2019 -0700 + + [dcl.attr.nodiscard] Fix vexing-parse bug in example. Make sure the + missiles actually get launched, not merely redeclared. + + commit f10e3751b39138746b601fa702c9ed9e67777c96 + Author: Richard Smith + Date: Fri Aug 2 15:59:50 2019 -0700 + + [over.ics.rank] Reorder examples to match order of normative text. + + commit 47539b965a84f69c548fe043a632af17db3cb315 + Author: Richard Smith + Date: Fri Aug 2 15:49:39 2019 -0700 + + [conv.qual] Move note after the rule that implies it. + + commit c0c589881759871b2183105f315d4ddd0d2734be + Author: Jens Maurer + Date: Thu Aug 1 22:47:19 2019 +0200 + + [expr.const.cast] Clarify pairwise correspondence for P_i. + [over.ics.rank] Move cross-reference pointing to [conv.qual]. + + commit 1fbc1c315008152770eea8bd383aa2a4fa47cfd5 + Author: Jens Maurer + Date: Fri Jul 26 16:56:13 2019 +0200 + + [basic.def.odr] Turn long comma-separate list into bullets. + + commit 5d1bb1c7f8ed44016c38bfeb9797e363d52cfc51 + Author: Richard Smith + Date: Thu Aug 1 20:42:13 2019 -0700 + + [over.match.oper] Replace "member, non-member, and built-in candidates" + with "non-rewritten candidates" + + This simplifies the wording, implicitly explains why we're considering + only some candidates, and avoids overtly suggesting that we could ever + pick a reversed-parameter-order built-in candidate. + + commit 46ba985402de963f50d364b26b594707be16c7c9 + Author: Richard Smith + Date: Mon Jul 22 04:42:43 2019 +0200 + + [dcl.enum] Avoid hanging paragraphs by moving "Enumeration declarations" + down one level to a sibling of "The using enum declaration". + + [namespace.udir] Rename section to "Using namespace directive" to + further distinguish this from a using enum declaration. + + commit d6a291776858bc647fc6826888767284f305c799 + Author: Richard Smith + Date: Mon Jul 22 03:58:34 2019 +0200 + + [dcl.attr.nodiscard] Simplify note describing the string-literal in a + nodiscard attribute and make it less confusing. + + commit dc45e8c329eeb0076d074fa671c2be2fc605555a + Author: Richard Smith + Date: Mon Jul 22 03:18:33 2019 +0200 + + [class.spaceship] Remove incorrect note. + + commit 6bd3daeae3a3e9ae6174c35ab020dbfe4504b75b + Author: Richard Smith + Date: Thu Aug 1 20:04:36 2019 -0700 + + [class.ctor], [class.dtor] Introduce actual definitions for + "constructor" and "prospective destructor". + + commit 94a72b5c11a20cfd6c92a4faa5bd0df4b8ebc620 + Author: Richard Smith + Date: Mon Jul 22 02:28:15 2019 +0200 + + [class.dtor] Reorder the introduction of an implicit prospective + destructor to before we describe the overload resolution to pick the + actual destructor. + + commit 98c2c56ab5e945452586270d72d2fb606b71cd94 + Author: Richard Smith + Date: Mon Jul 22 02:24:42 2019 +0200 + + [class.prop] [special] Move definition of eligible special member + functions to the section on special member functions. + + commit 67db9422b6bc58f5399c7c019ec5ede28d8ac4f5 + Author: Jens Maurer + Date: Fri Jun 28 17:01:54 2019 +0200 + + [expr.prim.req] Fix cross-reference for substituting into constraints. + + commit 51c5b01217799fdfa754179c20af888ec8c1889d + Author: Casey Carter + Date: Wed Jul 10 00:40:19 2019 -0700 + + [temp.constr.order] Remove extraneous "the". (#2964) + + commit 4f9942cafadc17fb902610b4c67afb6fcf81ff64 + Author: Jens Maurer + Date: Sun Jul 7 19:38:20 2019 +0200 + + [dcl.asm] Rename grammar term 'asm-definition' to 'asm-declaration' + + commit c635711cdd81346ad41c7861adb8035176fa236f + Author: Eelis + Date: Fri Jul 5 23:55:22 2019 +0200 + + [temp.constr.constr] Add missing period at end of sentence. (#2957) + + commit 72cc844ef44ae47aebb1ad346146138d3279be9e + Author: Eelis + Date: Fri Jul 5 16:16:58 2019 +0200 + + [expr.reinterpret.cast] Properly capitalize full-sentence bullets. (#2956) + + commit f54f306c3b9fad27e70766963840e3df14f20b28 + Author: Jens Maurer + Date: Thu Jul 4 15:34:38 2019 +0200 + + [func.bind] Remove bogus 'shall's. (#2955) + + commit da7eac5e621b5fab12c0b1992100c4bfd983ed8e + Author: Saar Raz + Date: Mon Jul 1 22:46:37 2019 +0300 + + [Concepts] Remove qualified-concept-name reference + + Update 'qualified-concept-name' (the previous incarnation of 'type-constraint') reference to 'type-constraint' in [temp.over.link]p6. + + commit 97b615a5a6ab0598b624ee05402c531d0421cff6 + Author: Casey Carter + Date: Tue Jun 25 06:09:55 2019 -0700 + + [iterator.synopsis] Copy constraint for iterator_traits from [iterator.traits]/5 (#2943) + + commit 44ea29778d15cd5d9f2b5c706c6b3f4338548ec2 + Author: Casey Carter + Date: Tue Jun 25 06:04:14 2019 -0700 + + [range.filter.sentinel] Correct typo in constructor Effects (#2937) diff --git a/papers/n4828.pdf b/papers/n4828.pdf new file mode 100644 index 0000000000..3cb6aff33a Binary files /dev/null and b/papers/n4828.pdf differ diff --git a/source/atomics.tex b/source/atomics.tex index bcff1c26d8..762a8c77fc 100644 --- a/source/atomics.tex +++ b/source/atomics.tex @@ -1344,7 +1344,7 @@ \begin{itemdescr} \effects Equivalent to: -\tcode{return fetch_\placeholder{key}(operand) \placeholdernc{op} operand;} +\tcode{return fetch_\placeholdernc{key}(operand) \placeholdernc{op} operand;} \end{itemdescr} \rSec2[atomics.ref.pointer]{Partial specialization for pointers} @@ -1444,7 +1444,7 @@ \begin{itemdescr} \pnum \effects Equivalent to: -\tcode{return fetch_\placeholder{key}(operand) \placeholdernc{op} operand;} +\tcode{return fetch_\placeholdernc{key}(operand) \placeholdernc{op} operand;} \end{itemdescr} \rSec2[atomics.ref.memop]{Member operators @@ -2213,7 +2213,7 @@ \begin{itemdescr} \pnum -\effects Equivalent to: \tcode{return fetch_\placeholder{key}(operand) \placeholder{op} operand;} +\effects Equivalent to: \tcode{return fetch_\placeholdernc{key}(operand) \placeholder{op} operand;} \end{itemdescr} \rSec2[atomics.types.float]{Specializations for floating-point types} @@ -2358,7 +2358,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return fetch_\placeholder{key}(operand) \placeholder{op} operand;} +Equivalent to: \tcode{return fetch_\placeholdernc{key}(operand) \placeholder{op} operand;} \pnum \remarks @@ -2510,7 +2510,7 @@ \begin{itemdescr} \pnum -\effects Equivalent to: \tcode{return fetch_\placeholder{key}(operand) \placeholder{op} operand;} +\effects Equivalent to: \tcode{return fetch_\placeholdernc{key}(operand) \placeholder{op} operand;} \end{itemdescr} \rSec2[atomics.types.memop]{Member operators common to integers and pointers to objects} diff --git a/source/concepts.tex b/source/concepts.tex index b94f4cce6f..561d728cc4 100644 --- a/source/concepts.tex +++ b/source/concepts.tex @@ -279,7 +279,7 @@ concept @\placeholdernc{same-as-impl}@ = is_same_v; // \expos template - concept same_as = @\placeholdernc{same-as-impl}@ && @\placeholdernc{same-as-impl}@; + concept same_as = @\placeholder{same-as-impl}@ && @\placeholder{same-as-impl}@; \end{itemdecl} \begin{itemdescr} diff --git a/source/config.tex b/source/config.tex index 28aceaecd5..48e80b9fc3 100644 --- a/source/config.tex +++ b/source/config.tex @@ -1,7 +1,7 @@ %!TEX root = std.tex %%-------------------------------------------------- %% Version numbers -\newcommand{\docno}{Dxxxx} +\newcommand{\docno}{N4828} \newcommand{\prevdocno}{N4820} \newcommand{\cppver}{201703L} diff --git a/source/containers.tex b/source/containers.tex index 24b4216aaf..7ca1b8cdb9 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -6251,7 +6251,7 @@ using reverse_iterator = std::reverse_iterator; using const_reverse_iterator = std::reverse_iterator; using node_type = @\unspec@; - using insert_return_type = @\placeholdernc{insert-return-type}@; + using insert_return_type = @\placeholder{insert-return-type}@; class value_compare { friend class map; @@ -7116,7 +7116,7 @@ using reverse_iterator = std::reverse_iterator; using const_reverse_iterator = std::reverse_iterator; using node_type = @\unspec@; - using insert_return_type = @\placeholdernc{insert-return-type}@; + using insert_return_type = @\placeholder{insert-return-type}@; // \ref{set.cons}, construct/copy/destroy set() : set(Compare()) { } @@ -7802,7 +7802,7 @@ using local_iterator = @\impdefx{type of \tcode{unordered_map::local_iterator}}@; // see \ref{container.requirements} using const_local_iterator = @\impdefx{type of \tcode{unordered_map::const_local_iterator}}@; // see \ref{container.requirements} using node_type = @\unspec@; - using insert_return_type = @\placeholdernc{insert-return-type}@; + using insert_return_type = @\placeholder{insert-return-type}@; // \ref{unord.map.cnstr}, construct/copy/destroy unordered_map(); @@ -8754,7 +8754,7 @@ using local_iterator = @\impdefx{type of \tcode{unordered_set::local_iterator}}@; // see \ref{container.requirements} using const_local_iterator = @\impdefx{type of \tcode{unordered_set::const_local_iterator}}@; // see \ref{container.requirements} using node_type = @\unspec@; - using insert_return_type = @\placeholdernc{insert-return-type}@; + using insert_return_type = @\placeholder{insert-return-type}@; // \ref{unord.set.cnstr}, construct/copy/destroy unordered_set(); diff --git a/source/iterators.tex b/source/iterators.tex index 9e95e92656..0bb5ed04fa 100644 --- a/source/iterators.tex +++ b/source/iterators.tex @@ -38,7 +38,7 @@ namespace std { template using @\placeholder{with-reference}@ = T&; // \expos template concept @\placeholder{can-reference}@ // \expos - = requires { typename @\placeholdernc{with-reference}@; }; + = requires { typename @\placeholder{with-reference}@; }; template concept @\placeholder{dereferenceable}@ // \expos = requires(T& t) { { *t } -> @\placeholder{can-reference}@; // not required to be equality-preserving @@ -1293,7 +1293,7 @@ default_constructible && movable && requires(I i) { typename iter_difference_t; - requires @\placeholdernc{is-signed-integer-like}@>; + requires @\placeholder{is-signed-integer-like}@>; { ++i } -> same_as; // not required to be equality-preserving i++; // not required to be equality-preserving }; @@ -1397,9 +1397,9 @@ if it is an unsigned-integer-class type. \pnum -\tcode{\placeholdernc{is-integer-like}} is \tcode{true} +\tcode{\placeholder{is-integer-like}} is \tcode{true} if and only if \tcode{I} is an integer-like type. -\tcode{\placeholdernc{is-signed-integer-like}} is \tcode{true} +\tcode{\placeholder{is-signed-integer-like}} is \tcode{true} if and only if I is a signed-integer-like type. \pnum @@ -4869,12 +4869,12 @@ \item Otherwise, equivalent to: -\tcode{return \placeholder{proxy}(*get(v_));} where +\tcode{return \placeholdernc{proxy}(*get(v_));} where \tcode{\placeholder{proxy}} is the exposition-only class: \begin{codeblock} class @\placeholder{proxy}@ { iter_value_t keep_; - @\placeholder{proxy}@(iter_reference_t&& x) + @\placeholdernc{proxy}@(iter_reference_t&& x) : keep_(std::move(x)) {} public: const iter_value_t* operator->() const { @@ -6035,7 +6035,7 @@ class istreambuf_iterator::@\placeholder{proxy}@ { // \expos charT keep_; basic_streambuf* sbuf_; - @\placeholder{proxy}@(charT c, basic_streambuf* sbuf) + @\placeholdernc{proxy}@(charT c, basic_streambuf* sbuf) : keep_(c), sbuf_(sbuf) { } public: charT operator*() { return keep_; } @@ -6138,7 +6138,7 @@ \begin{itemdescr} \pnum \returns -\tcode{\placeholder{proxy}(sbuf_->sbumpc(), sbuf_)}. +\tcode{\placeholdernc{proxy}(sbuf_->sbumpc(), sbuf_)}. \end{itemdescr} \indexlibrarymember{equal}{istreambuf_iterator}% diff --git a/source/lex.tex b/source/lex.tex index 647871d028..c2c9371508 100644 --- a/source/lex.tex +++ b/source/lex.tex @@ -1844,7 +1844,7 @@ the form \begin{codeblock} -operator "" @\placeholder{X}@(@\placeholder{n}@ULL) +operator "" @\placeholdernc{X}@(@\placeholder{n}@ULL) \end{codeblock} Otherwise, \placeholder{S} shall contain a raw literal operator @@ -1853,7 +1853,7 @@ the literal \placeholder{L} is treated as a call of the form \begin{codeblock} -operator "" @\placeholder{X}@(@"\placeholder{n}{"}@) +operator "" @\placeholdernc{X}@(@"\placeholder{n}{"}@) \end{codeblock} Otherwise (\placeholder{S} contains a numeric literal operator template), @@ -1874,7 +1874,7 @@ the form \begin{codeblock} -operator "" @\placeholder{X}@(@\placeholder{f}@L) +operator "" @\placeholdernc{X}@(@\placeholder{f}@L) \end{codeblock} Otherwise, \placeholder{S} shall contain a raw literal operator @@ -1883,7 +1883,7 @@ the \grammarterm{literal} \placeholder{L} is treated as a call of the form \begin{codeblock} -operator "" @\placeholder{X}@(@"\placeholder{f}{"}@) +operator "" @\placeholdernc{X}@(@"\placeholder{f}{"}@) \end{codeblock} Otherwise (\placeholder{S} contains a numeric literal operator template), @@ -1914,7 +1914,7 @@ Otherwise, the literal \placeholder{L} is treated as a call of the form \begin{codeblock} -operator "" @\placeholder{X}@(@\placeholder{str}{}@, @\placeholder{len}{}@) +operator "" @\placeholdernc{X}@(@\placeholder{str}{}@, @\placeholder{len}{}@) \end{codeblock} \pnum @@ -1926,7 +1926,7 @@ of the form \begin{codeblock} -operator "" @\placeholder{X}@(@\placeholder{ch}{}@) +operator "" @\placeholdernc{X}@(@\placeholder{ch}{}@) \end{codeblock} \pnum diff --git a/source/locales.tex b/source/locales.tex index 11a2836e83..82d906933f 100644 --- a/source/locales.tex +++ b/source/locales.tex @@ -4712,7 +4712,7 @@ Each of these functions \tcode{\placeholder{F}} returns the result of calling the corresponding virtual member function -\tcode{do_\placeholder{F}()}. +\tcode{do_\placeholdernc{F}()}. \rSec4[locale.moneypunct.virtuals]{Virtual functions} diff --git a/source/numerics.tex b/source/numerics.tex index edb32a16ef..be41864f9b 100644 --- a/source/numerics.tex +++ b/source/numerics.tex @@ -9626,12 +9626,12 @@ \item If \tcode{isfinite(t) \&\& a == b}, then \tcode{r == a}. \item If \tcode{isfinite(t) || !isnan(t) \&\& b-a != 0}, then \tcode{!isnan(r)}. \end{itemize} -Let \tcode{\placeholder{CMP}(x,y)} be \tcode{1} if \tcode{x > y}, +Let \tcode{\placeholdernc{CMP}(x,y)} be \tcode{1} if \tcode{x > y}, \tcode{-1} if \tcode{x < y}, and \tcode{0} otherwise. For any \tcode{t1} and \tcode{t2}, the product of -\tcode{\placeholder{CMP}(lerp(a, b, t2), lerp(a, b, t1))}, -\tcode{\placeholder{CMP}(t2, t1)}, and -\tcode{\placeholder{CMP}(b, a)} +\tcode{\placeholdernc{CMP}(lerp(a, b, t2), lerp(a, b, t1))}, +\tcode{\placeholdernc{CMP}(t2, t1)}, and +\tcode{\placeholdernc{CMP}(b, a)} is non-negative. \end{itemdescr} diff --git a/source/ranges.tex b/source/ranges.tex index c4d5a821d2..8e12bb47b1 100644 --- a/source/ranges.tex +++ b/source/ranges.tex @@ -761,7 +761,7 @@ }; template - concept range = @\placeholdernc{range-impl}@; + concept range = @\placeholder{range-impl}@; template concept @\placeholder{forwarding-range}@ = // \expos @@ -1239,11 +1239,11 @@ template concept @\placeholdernc{pair-like-convertible-from}@ = // \expos - !range && @\placeholdernc{pair-like}@ && constructible_from; + !range && @\placeholder{pair-like}@ && constructible_from; template concept @\placeholdernc{iterator-sentinel-pair}@ = // \expos - !range && @\placeholdernc{pair-like}@ && + !range && @\placeholder{pair-like}@ && sentinel_for, tuple_element_t<0, T>>; template S = I, subrange_kind K = @@ -1265,8 +1265,8 @@ constexpr subrange(I i, S s, @\placeholdernc{make-unsigned-like-t}@(iter_difference_t) n) requires (K == subrange_kind::sized); - template<@\placeholdernc{not-same-as}@ R> - requires @\placeholdernc{forwarding-range}@ && + template<@\placeholder{not-same-as}@ R> + requires @\placeholder{forwarding-range}@ && convertible_to, I> && convertible_to, S> constexpr subrange(R&& r) requires (!StoreSize || sized_range); @@ -1277,22 +1277,22 @@ : subrange{ranges::begin(r), ranges::end(r), n} {} - template<@\placeholdernc{not-same-as}@ PairLike> - requires @\placeholdernc{pair-like-convertible-to}@ + template<@\placeholder{not-same-as}@ PairLike> + requires @\placeholder{pair-like-convertible-to}@ constexpr subrange(PairLike&& r) requires (!StoreSize) : subrange{std::get<0>(std::forward(r)), std::get<1>(std::forward(r))} {} - template<@\placeholdernc{pair-like-convertible-to}@ PairLike> + template<@\placeholder{pair-like-convertible-to}@ PairLike> constexpr subrange(PairLike&& r, @\placeholdernc{make-unsigned-like-t}@(iter_difference_t) n) requires (K == subrange_kind::sized) : subrange{std::get<0>(std::forward(r)), std::get<1>(std::forward(r)), n} {} - template<@\placeholdernc{not-same-as}@ PairLike> - requires @\placeholdernc{pair-like-convertible-from}@ + template<@\placeholder{not-same-as}@ PairLike> + requires @\placeholder{pair-like-convertible-from}@ constexpr operator PairLike() const; constexpr I begin() const; @@ -1385,8 +1385,8 @@ \indexlibrary{\idxcode{subrange}!\idxcode{subrange}}% \begin{itemdecl} -template<@\placeholdernc{not-same-as}@ R> - requires @\placeholdernc{forwarding-range}@ && +template<@\placeholder{not-same-as}@ R> + requires @\placeholder{forwarding-range}@ && convertible_to, I> && convertible_to, S> constexpr subrange(R&& r) requires (!StoreSize || sized_range); \end{itemdecl} @@ -1403,8 +1403,8 @@ \indexlibrary{\idxcode{operator \placeholder{PairLike}}!\idxcode{subrange}}% \begin{itemdecl} -template<@\placeholdernc{not-same-as}@ PairLike> - requires @\placeholdernc{pair-like-convertible-from}@ +template<@\placeholder{not-same-as}@ PairLike> + requires @\placeholder{pair-like-convertible-from}@ constexpr operator PairLike() const; \end{itemdecl} @@ -1654,7 +1654,7 @@ requires is_object_v class single_view : public view_interface> { private: - @\placeholdernc{semiregular-box}@ value_; // \expos{} (see \ref{range.semi.wrap}) + @\placeholder{semiregular-box}@ value_; // \expos{} (see \ref{range.semi.wrap}) public: single_view() = default; constexpr explicit single_view(const T& t); @@ -1786,7 +1786,7 @@ @\seebelow@; template - requires @\placeholdernc{weakly-equality-comparable-with}@ + requires @\placeholder{weakly-equality-comparable-with}@ class iota_view : public view_interface> { private: // \ref{range.iota.iterator}, class \tcode{iota_view::iterator} @@ -1809,8 +1809,8 @@ }; template - requires (!@\placeholdernc{is-integer-like}@ || !@\placeholdernc{is-integer-like}@ || - (@\placeholdernc{is-signed-integer-like}@ == @\placeholdernc{is-signed-integer-like}@)) + requires (!@\placeholder{is-integer-like}@ || !@\placeholder{is-integer-like}@ || + (@\placeholder{is-signed-integer-like}@ == @\placeholder{is-signed-integer-like}@)) iota_view(W, Bound) -> iota_view; } \end{codeblock} @@ -1875,7 +1875,7 @@ \begin{itemdecl} template concept @\placeholder{advanceable}@ = - @\placeholdernc{decrementable}@ && totally_ordered && + @\placeholder{decrementable}@ && totally_ordered && requires(I i, const I j, const @\placeholdernc{IOTA-DIFF-T}@(I) n) { { i += n } -> same_as; { i -= n } -> same_as; @@ -1990,7 +1990,7 @@ \pnum \effects Equivalent to: \begin{codeblock} -if constexpr (@\placeholdernc{is-integer-like}@ && @\placeholdernc{is-integer-like}@) +if constexpr (@\placeholder{is-integer-like}@ && @\placeholder{is-integer-like}@) return (value_ < 0) ? ((bound_ < 0) ? @\placeholdernc{make-unsigned-like}@(-value_) - @\placeholdernc{make-unsigned-like}@(-bound_) @@ -2030,15 +2030,15 @@ constexpr void operator++(int); constexpr iterator operator++(int) requires incrementable; - constexpr iterator& operator--() requires @\placeholdernc{decrementable}@; - constexpr iterator operator--(int) requires @\placeholdernc{decrementable}@; + constexpr iterator& operator--() requires @\placeholder{decrementable}@; + constexpr iterator operator--(int) requires @\placeholder{decrementable}@; constexpr iterator& operator+=(difference_type n) - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; constexpr iterator& operator-=(difference_type n) - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; constexpr W operator[](difference_type n) const - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; friend constexpr bool operator==(const iterator& x, const iterator& y) requires equality_comparable; @@ -2056,14 +2056,14 @@ requires totally_ordered && three_way_comparable; friend constexpr iterator operator+(iterator i, difference_type n) - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; friend constexpr iterator operator+(difference_type n, iterator i) - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; friend constexpr iterator operator-(iterator i, difference_type n) - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; friend constexpr difference_type operator-(const iterator& x, const iterator& y) - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; }; } \end{codeblock} @@ -2152,7 +2152,7 @@ \indexlibrary{\idxcode{operator\dcr}!\idxcode{iota_view::iterator}} \begin{itemdecl} -constexpr iterator& operator--() requires @\placeholdernc{decrementable}@; +constexpr iterator& operator--() requires @\placeholder{decrementable}@; \end{itemdecl} \begin{itemdescr} @@ -2166,7 +2166,7 @@ \indexlibrary{\idxcode{operator\dcr}!\idxcode{iota_view::iterator}} \begin{itemdecl} -constexpr iterator operator--(int) requires @\placeholdernc{decrementable}@; +constexpr iterator operator--(int) requires @\placeholder{decrementable}@; \end{itemdecl} \begin{itemdescr} @@ -2182,14 +2182,14 @@ \indexlibrary{\idxcode{operator+=}!\idxcode{iota_view::iterator}} \begin{itemdecl} constexpr iterator& operator+=(difference_type n) - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; \end{itemdecl} \begin{itemdescr} \pnum \effects Equivalent to: \begin{codeblock} -if constexpr (@\placeholdernc{is-integer-like}@ && !@\placeholdernc{is-signed-integer-like}@) { +if constexpr (@\placeholder{is-integer-like}@ && !@\placeholder{is-signed-integer-like}@) { if (n >= difference_type(0)) value_ += static_cast(n); else @@ -2204,14 +2204,14 @@ \indexlibrary{\idxcode{operator-=}!\idxcode{iota_view::iterator}} \begin{itemdecl} constexpr iterator& operator-=(difference_type n) - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; \end{itemdecl} \begin{itemdescr} \pnum \effects Equivalent to: \begin{codeblock} -if constexpr (@\placeholdernc{is-integer-like}@ && !@\placeholdernc{is-signed-integer-like}@) { +if constexpr (@\placeholder{is-integer-like}@ && !@\placeholder{is-signed-integer-like}@) { if (n >= difference_type(0)) value_ -= static_cast(n); else @@ -2226,7 +2226,7 @@ \indexlibrary{\idxcode{operator[]}!\idxcode{iota_view::iterator}} \begin{itemdecl} constexpr W operator[](difference_type n) const - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; \end{itemdecl} \begin{itemdescr} @@ -2305,7 +2305,7 @@ \indexlibrary{\idxcode{operator+}!\idxcode{iota_view::iterator}} \begin{itemdecl} friend constexpr iterator operator+(iterator i, difference_type n) - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; \end{itemdecl} \begin{itemdescr} @@ -2316,7 +2316,7 @@ \indexlibrary{\idxcode{operator+}!\idxcode{iota_view::iterator}} \begin{itemdecl} friend constexpr iterator operator+(difference_type n, iterator i) - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; \end{itemdecl} \begin{itemdescr} @@ -2327,7 +2327,7 @@ \indexlibrary{\idxcode{operator-}!\idxcode{iota_view::iterator}} \begin{itemdecl} friend constexpr iterator operator-(iterator i, difference_type n) - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; \end{itemdecl} \begin{itemdescr} @@ -2338,7 +2338,7 @@ \indexlibrary{\idxcode{operator-}!\idxcode{iota_view::iterator}} \begin{itemdecl} friend constexpr difference_type operator-(const iterator& x, const iterator& y) - requires @\placeholdernc{advanceable}@; + requires @\placeholder{advanceable}@; \end{itemdecl} \begin{itemdescr} @@ -2522,7 +2522,7 @@ \item If \tcode{T} models \libconcept{default_constructible}, the default constructor of \tcode{\placeholder{semiregular-box}} is equivalent to: \begin{codeblock} -constexpr @\placeholder{semiregular-box}@() noexcept(is_nothrow_default_constructible_v) +constexpr @\placeholdernc{semiregular-box}@() noexcept(is_nothrow_default_constructible_v) : @\placeholder{semiregular-box}@{in_place} { } \end{codeblock} @@ -2628,12 +2628,12 @@ \pnum \remarks Let \tcode{\placeholder{FUN}} denote the exposition-only functions \begin{codeblock} -void @\placeholder{FUN}@(R&); -void @\placeholder{FUN}@(R&&) = delete; +void @\placeholdernc{FUN}@(R&); +void @\placeholdernc{FUN}@(R&&) = delete; \end{codeblock} The expression in the \grammarterm{requires-clause} is equivalent to \begin{codeblock} -convertible_to && requires { @\placeholder{FUN}@(declval()); } +convertible_to && requires { @\placeholdernc{FUN}@(declval()); } \end{codeblock} \pnum @@ -2670,7 +2670,7 @@ class filter_view : public view_interface> { private: V base_ = V(); // \expos - @\placeholdernc{semiregular-box}@ pred_; // \expos + @\placeholder{semiregular-box}@ pred_; // \expos // \ref{range.filter.iterator}, class \tcode{filter_view::iterator} class iterator; // \expos @@ -3070,7 +3070,7 @@ template struct sentinel; // \expos V base_ = V(); // \expos - @\placeholdernc{semiregular-box}@ fun_; // \expos + @\placeholder{semiregular-box}@ fun_; // \expos public: transform_view() = default; @@ -4798,13 +4798,13 @@ template concept @\placeholdernc{tiny-range}@ = // \expos sized_range && - requires { typename @\placeholdernc{require-constant}@::size()>; } && + requires { typename @\placeholder{require-constant}@::size()>; } && (remove_reference_t::size() <= 1); template requires view && view && indirectly_comparable, iterator_t, ranges::equal_to> && - (forward_range || @\placeholdernc{tiny-range}@) + (forward_range || @\placeholder{tiny-range}@) class split_view : public view_interface> { private: V base_ = V(); // \expos diff --git a/source/strings.tex b/source/strings.tex index 302bec10ee..ee24fe7bcd 100644 --- a/source/strings.tex +++ b/source/strings.tex @@ -2831,35 +2831,35 @@ \item Each member function of the form \begin{codeblock} -constexpr size_type @\placeholder{F}@(const basic_string& str, size_type pos) const noexcept; +constexpr size_type @\placeholdernc{F}@(const basic_string& str, size_type pos) const noexcept; \end{codeblock} has effects equivalent to: -\tcode{return \placeholder{F}(basic_string_view(str), pos);} +\tcode{return \placeholdernc{F}(basic_string_view(str), pos);} \item Each member function of the form \begin{codeblock} -constexpr size_type @\placeholder{F}@(const charT* s, size_type pos) const; +constexpr size_type @\placeholdernc{F}@(const charT* s, size_type pos) const; \end{codeblock} has effects equivalent to: -\tcode{return \placeholder{F}(basic_string_view(s), pos);} +\tcode{return \placeholdernc{F}(basic_string_view(s), pos);} \item Each member function of the form \begin{codeblock} -constexpr size_type @\placeholder{F}@(const charT* s, size_type pos, size_type n) const; +constexpr size_type @\placeholdernc{F}@(const charT* s, size_type pos, size_type n) const; \end{codeblock} has effects equivalent to: -\tcode{return \placeholder{F}(basic_string_view(s, n), pos);} +\tcode{return \placeholdernc{F}(basic_string_view(s, n), pos);} \item Each member function of the form \begin{codeblock} -constexpr size_type @\placeholder{F}@(charT c, size_type pos) const noexcept; +constexpr size_type @\placeholdernc{F}@(charT c, size_type pos) const noexcept; \end{codeblock} has effects equivalent to: \begin{codeblock} -return @\placeholder{F}@(basic_string_view(addressof(c), 1), pos); +return @\placeholdernc{F}@(basic_string_view(addressof(c), 1), pos); \end{codeblock} \end{itemize} @@ -2902,7 +2902,7 @@ Equivalent to: \begin{codeblock} basic_string_view s = *this, sv = t; -return s.@\placeholder{G}@(sv, pos); +return s.@\placeholdernc{G}@(sv, pos); \end{codeblock} \pnum @@ -4562,23 +4562,23 @@ \item Each member function of the form \begin{codeblock} -constexpr @\placeholder{return-type}@ @\placeholder{F}@(const charT* s, size_type pos) const; +constexpr @\placeholder{return-type}@ @\placeholdernc{F}@(const charT* s, size_type pos) const; \end{codeblock} -has effects equivalent to: \tcode{return \placeholder{F}(basic_string_view(s), pos);} +has effects equivalent to: \tcode{return \placeholdernc{F}(basic_string_view(s), pos);} \item Each member function of the form \begin{codeblock} -constexpr @\placeholder{return-type}@ @\placeholder{F}@(const charT* s, size_type pos, size_type n) const; +constexpr @\placeholder{return-type}@ @\placeholdernc{F}@(const charT* s, size_type pos, size_type n) const; \end{codeblock} -has effects equivalent to: \tcode{return \placeholder{F}(basic_string_view(s, n), pos);} +has effects equivalent to: \tcode{return \placeholdernc{F}(basic_string_view(s, n), pos);} \item Each member function of the form \begin{codeblock} -constexpr @\placeholder{return-type}@ @\placeholder{F}@(charT c, size_type pos) const noexcept; +constexpr @\placeholder{return-type}@ @\placeholdernc{F}@(charT c, size_type pos) const noexcept; \end{codeblock} -has effects equivalent to: \tcode{return \placeholder{F}(basic_string_view(addressof(c), 1), pos);} +has effects equivalent to: \tcode{return \placeholdernc{F}(basic_string_view(addressof(c), 1), pos);} \end{itemize} \indexlibrarymember{find}{basic_string_view}% diff --git a/source/templates.tex b/source/templates.tex index 1682ce7b19..32e28f6f28 100644 --- a/source/templates.tex +++ b/source/templates.tex @@ -8424,7 +8424,7 @@ T&& T[@\placeholder{integer-constant}@] @\grammarterm{template-name}@ @\textrm{(where \tcode{\grammarterm{template-name}} refers to a class template)}@ -@\placeholder{type}@(T) +@\placeholdernc{type}@(T) T() T(T) T @\placeholder{type}@::* diff --git a/source/threads.tex b/source/threads.tex index 3776e2f49a..6ffd145b88 100644 --- a/source/threads.tex +++ b/source/threads.tex @@ -6774,7 +6774,7 @@ \begin{itemdescr} \pnum \requires -\tcode{\placeholdernc{INVOKE}(f, t$_1$, t$_2$, $\dotsc$, t$_N$)}\iref{func.require}, where \tcode{t$_1$, t$_2$, $\dotsc$, t$_N$} are values +\tcode{\placeholder{INVOKE}(f, t$_1$, t$_2$, $\dotsc$, t$_N$)}\iref{func.require}, where \tcode{t$_1$, t$_2$, $\dotsc$, t$_N$} are values of the corresponding types in \tcode{ArgTypes...}, shall be a valid expression. Invoking a copy of \tcode{f} shall behave the same as invoking \tcode{f}. @@ -6900,7 +6900,7 @@ \begin{itemdescr} \pnum -\effects As if by \tcode{\placeholdernc{INVOKE}(f, t$_1$, t$_2$, $\dotsc$, t$_N$)}\iref{func.require}, +\effects As if by \tcode{\placeholder{INVOKE}(f, t$_1$, t$_2$, $\dotsc$, t$_N$)}\iref{func.require}, where \tcode{f} is the stored task of \tcode{*this} and \tcode{t$_1$, t$_2$, $\dotsc$, t$_N$} are the values in \tcode{args...}. If the task returns normally, @@ -6930,7 +6930,7 @@ \begin{itemdescr} \pnum -\effects As if by \tcode{\placeholdernc{INVOKE}(f, t$_1$, t$_2$, $\dotsc$, t$_N$)}\iref{func.require}, +\effects As if by \tcode{\placeholder{INVOKE}(f, t$_1$, t$_2$, $\dotsc$, t$_N$)}\iref{func.require}, where \tcode{f} is the stored task and \tcode{t$_1$, t$_2$, $\dotsc$, t$_N$} are the values in \tcode{args...}. If the task returns normally, the return value is stored as the asynchronous result in the shared state of diff --git a/source/utilities.tex b/source/utilities.tex index 1c791e1251..4f1bddf85e 100644 --- a/source/utilities.tex +++ b/source/utilities.tex @@ -1711,7 +1711,7 @@ \end{codeblock} Equivalent to: \begin{codeblock} -return @\placeholdernc{make-from-tuple-impl}@( +return @\placeholder{make-from-tuple-impl}@( forward(t), make_index_sequence>>{}); \end{codeblock} @@ -1959,7 +1959,7 @@ \tcode{t <=> u} returns \tcode{strong_ordering::equal}. Otherwise, equivalent to: \begin{codeblock} -if (auto c = @\placeholder{synth-three-way}@(get<0>(t), get<0>(u)); c != 0) return c; +if (auto c = @\placeholdernc{synth-three-way}@(get<0>(t), get<0>(u)); c != 0) return c; return @$\tcode{t}_\mathrm{tail}$@ <=> @$\tcode{u}_\mathrm{tail}$@; \end{codeblock} where $\tcode{r}_\mathrm{tail}$ for some tuple \tcode{r} @@ -4751,7 +4751,7 @@ all $0 \leq i < n$. For each valid pack $\tcode{m}$, let $e(\tcode{m})$ denote the expression: \begin{codeblock} -@\placeholder{INVOKE}@(std::forward(vis), get(std::forward(vars))...) // see \ref{func.require} +@\placeholdernc{INVOKE}@(std::forward(vis), get(std::forward(vars))...) // see \ref{func.require} \end{codeblock} for the first form and \begin{codeblock} @@ -6475,7 +6475,7 @@ ForwardIterator first, Size n); namespace ranges { - template<@\placeholdernc{no-throw-forward-iterator}@ I, @\placeholdernc{no-throw-sentinel}@ S> + template<@\placeholdernc{no-throw-forward-iterator}@ I, @\placeholder{no-throw-sentinel}@ S> requires default_constructible> I uninitialized_default_construct(I first, S last); template<@\placeholdernc{no-throw-forward-range}@ R> @@ -6499,7 +6499,7 @@ ForwardIterator first, Size n); namespace ranges { - template<@\placeholdernc{no-throw-forward-iterator}@ I, @\placeholdernc{no-throw-sentinel}@ S> + template<@\placeholdernc{no-throw-forward-iterator}@ I, @\placeholder{no-throw-sentinel}@ S> requires default_constructible> I uninitialized_value_construct(I first, S last); template<@\placeholdernc{no-throw-forward-range}@ R> @@ -6530,7 +6530,7 @@ template using uninitialized_copy_result = copy_result; template S1, - @\placeholdernc{no-throw-forward-iterator}@ O, @\placeholdernc{no-throw-sentinel}@ S2> + @\placeholdernc{no-throw-forward-iterator}@ O, @\placeholder{no-throw-sentinel}@ S2> requires constructible_from, iter_reference_t> uninitialized_copy_result uninitialized_copy(I ifirst, S1 ilast, O ofirst, S2 olast); @@ -6541,7 +6541,7 @@ template using uninitialized_copy_n_result = uninitialized_copy_result; - template S> + template S> requires constructible_from, iter_reference_t> uninitialized_copy_n_result uninitialized_copy_n(I ifirst, iter_difference_t n, O ofirst, S olast); @@ -6566,7 +6566,7 @@ template using uninitialized_move_result = uninitialized_copy_result; template S1, - @\placeholdernc{no-throw-forward-iterator}@ O, @\placeholdernc{no-throw-sentinel}@ S2> + @\placeholdernc{no-throw-forward-iterator}@ O, @\placeholder{no-throw-sentinel}@ S2> requires constructible_from, iter_rvalue_reference_t> uninitialized_move_result uninitialized_move(I ifirst, S1 ilast, O ofirst, S2 olast); @@ -6578,7 +6578,7 @@ template using uninitialized_move_n_result = uninitialized_copy_result; template S> + @\placeholdernc{no-throw-forward-iterator}@ O, @\placeholder{no-throw-sentinel}@ S> requires constructible_from, iter_rvalue_reference_t> uninitialized_move_n_result uninitialized_move_n(I ifirst, iter_difference_t n, O ofirst, S olast); @@ -6596,7 +6596,7 @@ ForwardIterator first, Size n, const T& x); namespace ranges { - template<@\placeholdernc{no-throw-forward-iterator}@ I, @\placeholdernc{no-throw-sentinel}@ S, class T> + template<@\placeholdernc{no-throw-forward-iterator}@ I, @\placeholder{no-throw-sentinel}@ S, class T> requires constructible_from, const T&> I uninitialized_fill(I first, S last, const T& x); template<@\placeholdernc{no-throw-forward-range}@ R, class T> @@ -6635,7 +6635,7 @@ template constexpr void destroy_at(T* location) noexcept; - template<@\placeholdernc{no-throw-input-iterator}@ I, @\placeholdernc{no-throw-sentinel}@ S> + template<@\placeholdernc{no-throw-input-iterator}@ I, @\placeholder{no-throw-sentinel}@ S> requires destructible> constexpr I destroy(I first, S last) noexcept; template<@\placeholdernc{no-throw-input-range}@ R> @@ -7969,7 +7969,7 @@ concept @\placeholdernc{no-throw-input-range}@ = // \expos range && @\placeholder{no-throw-input-iterator}@> && - @\placeholdernc{no-throw-sentinel}@, iterator_t>; + @\placeholder{no-throw-sentinel}@, iterator_t>; \end{itemdecl} \begin{itemdescr} @@ -7984,7 +7984,7 @@ concept @\placeholdernc{no-throw-forward-iterator}@ = // \expos @\placeholder{no-throw-input-iterator}@ && forward_iterator && - @\placeholdernc{no-throw-sentinel}@; + @\placeholder{no-throw-sentinel}@; \end{itemdecl} \begin{itemdescr} @@ -8042,7 +8042,7 @@ \indexlibrary{\idxcode{uninitialized_default_construct}}% \begin{itemdecl} namespace ranges { - template<@\placeholdernc{no-throw-forward-iterator}@ I, @\placeholdernc{no-throw-sentinel}@ S> + template<@\placeholdernc{no-throw-forward-iterator}@ I, @\placeholder{no-throw-sentinel}@ S> requires default_constructible> I uninitialized_default_construct(I first, S last); template<@\placeholdernc{no-throw-forward-range}@ R> @@ -8119,7 +8119,7 @@ \indexlibrary{\idxcode{uninitialized_value_construct}}% \begin{itemdecl} namespace ranges { - template<@\placeholdernc{no-throw-forward-iterator}@ I, @\placeholdernc{no-throw-sentinel}@ S> + template<@\placeholdernc{no-throw-forward-iterator}@ I, @\placeholder{no-throw-sentinel}@ S> requires default_constructible> I uninitialized_value_construct(I first, S last); template<@\placeholdernc{no-throw-forward-range}@ R> @@ -8206,7 +8206,7 @@ \begin{itemdecl} namespace ranges { template S1, - @\placeholdernc{no-throw-forward-iterator}@ O, @\placeholdernc{no-throw-sentinel}@ S2> + @\placeholdernc{no-throw-forward-iterator}@ O, @\placeholder{no-throw-sentinel}@ S2> requires constructible_from, iter_reference_t> uninitialized_copy_result uninitialized_copy(I ifirst, S1 ilast, O ofirst, S2 olast); @@ -8260,7 +8260,7 @@ \indexlibrary{\idxcode{uninitialized_copy_n}}% \begin{itemdecl} namespace ranges { - template S> + template S> requires constructible_from, iter_reference_t> uninitialized_copy_n_result uninitialized_copy_n(I ifirst, iter_difference_t n, O ofirst, S olast); @@ -8311,7 +8311,7 @@ \begin{itemdecl} namespace ranges { template S1, - @\placeholdernc{no-throw-forward-iterator}@ O, @\placeholdernc{no-throw-sentinel}@ S2> + @\placeholdernc{no-throw-forward-iterator}@ O, @\placeholder{no-throw-sentinel}@ S2> requires constructible_from, iter_rvalue_reference_t> uninitialized_move_result uninitialized_move(I ifirst, S1 ilast, O ofirst, S2 olast); @@ -8331,7 +8331,7 @@ \effects Equivalent to: \begin{codeblock} for (; ifirst != ilast && ofirst != olast; ++ofirst, (void)++ifirst) { - ::new (@\placeholder{voidify}@(*ofirst)) + ::new (@\placeholdernc{voidify}@(*ofirst)) remove_reference_t>(ranges::iter_move(ifirst)); } return {ifirst, ofirst}; @@ -8370,7 +8370,7 @@ \indexlibrary{\idxcode{uninitialized_move_n}}% \begin{itemdecl} namespace ranges { - template S> + template S> requires constructible_from, iter_rvalue_reference_t> uninitialized_move_n_result uninitialized_move_n(I ifirst, iter_difference_t n, O ofirst, S olast); @@ -8421,7 +8421,7 @@ \indexlibrary{\idxcode{uninitialized_fill}}% \begin{itemdecl} namespace ranges { - template<@\placeholdernc{no-throw-forward-iterator}@ I, @\placeholdernc{no-throw-sentinel}@ S, class T> + template<@\placeholdernc{no-throw-forward-iterator}@ I, @\placeholder{no-throw-sentinel}@ S, class T> requires constructible_from, const T&> I uninitialized_fill(I first, S last, const T& x); template<@\placeholdernc{no-throw-forward-range}@ R, class T> @@ -8544,7 +8544,7 @@ \indexlibrary{\idxcode{destroy}}% \begin{itemdecl} namespace ranges { - template<@\placeholdernc{no-throw-input-iterator}@ I, @\placeholdernc{no-throw-sentinel}@ S> + template<@\placeholdernc{no-throw-input-iterator}@ I, @\placeholder{no-throw-sentinel}@ S> requires destructible> constexpr I destroy(I first, S last) noexcept; template<@\placeholdernc{no-throw-input-range}@ R> @@ -13882,7 +13882,7 @@ \pnum \indexlibrary{invoke@\tcode{\placeholder{INVOKE}}}% -Define \tcode{\placeholdernc{INVOKE}(f, t$_1$, t$_2$, $\dotsc$, t$_N$)} as +Define \tcode{\placeholder{INVOKE}(f, t$_1$, t$_2$, $\dotsc$, t$_N$)} as \tcode{static_cast(\placeholdernc{INVOKE}(f, t$_1$, t$_2$, $\dotsc$, t$_N$))} if \tcode{R} is \cv{}~\tcode{void}, otherwise \tcode{\placeholdernc{INVOKE}(f, t$_1$, t$_2$, $\dotsc$, t$_N$)} implicitly converted @@ -15337,7 +15337,7 @@ \end{codeblock} for the first overload, and \begin{codeblock} -@\placeholdernc{INVOKE}@(static_cast<@$\tcode{V}_\tcode{fd}$@>(@$\tcode{v}_\tcode{fd}$@), +@\placeholder{INVOKE}@(static_cast<@$\tcode{V}_\tcode{fd}$@>(@$\tcode{v}_\tcode{fd}$@), static_cast<@$\tcode{V}_1$@>(@$\tcode{v}_1$@), static_cast<@$\tcode{V}_2$@>(@$\tcode{v}_2$@), @$\dotsc$@, static_cast<@$\tcode{V}_N$@>(@$\tcode{v}_N$@)) \end{codeblock} for the second overload, @@ -15550,7 +15550,7 @@ types \tcode{ArgTypes} and return type \tcode{R} if the expression -\tcode{\placeholdernc{INVOKE}(declval(), declval()...)}, +\tcode{\placeholder{INVOKE}(declval(), declval()...)}, considered as an unevaluated operand\iref{expr.prop}, is well-formed\iref{func.require}. @@ -15798,7 +15798,7 @@ \begin{itemdescr} \pnum -\returns \tcode{\placeholdernc{INVOKE}(f, std::forward(args)...)}\iref{func.require}, +\returns \tcode{\placeholder{INVOKE}(f, std::forward(args)...)}\iref{func.require}, where \tcode{f} is the target object\iref{func.def} of \tcode{*this}. \pnum\throws @@ -17548,7 +17548,7 @@ \indexlibrary{\idxcode{is_invocable_r}}% \tcode{template}\br \tcode{struct is_invocable_r;} & - The expression \tcode{\placeholdernc{INVOKE}(declval(), declval()...)} + The expression \tcode{\placeholder{INVOKE}(declval(), declval()...)} is well-formed when treated as an unevaluated operand & \tcode{Fn}, \tcode{R}, and all types in the template parameter pack \tcode{ArgTypes} shall be complete types, \cv{}~\tcode{void}, or @@ -17568,7 +17568,7 @@ \tcode{template}\br \tcode{struct is_nothrow_invocable_r;} & \tcode{is_invocable_r_v<}\br\tcode{R, Fn, ArgTypes...>} is \tcode{true} and - the expression \tcode{\placeholdernc{INVOKE}(declval(), declval()...)} + the expression \tcode{\placeholder{INVOKE}(declval(), declval()...)} is known not to throw any exceptions\iref{expr.unary.noexcept} & \tcode{Fn}, \tcode{R}, and all types in the template parameter pack \tcode{ArgTypes} shall be complete types, \cv{}~\tcode{void}, or