`_ instead,
then run the following command to install the other packages that the draft requires:
- sudo tlmgr install latexmk isodate substr relsize ulem fixme rsfs extract layouts enumitem l3packages l3kernel imakeidx splitindex
+ sudo tlmgr install latexmk isodate substr relsize ulem fixme rsfs extract layouts enumitem l3packages l3kernel imakeidx splitindex xstring
---------------------------------------
Getting Started on Debian-based Systems
diff --git a/papers/n4929.html b/papers/n4929.html
new file mode 100644
index 0000000000..9d0ae5c6b6
--- /dev/null
+++ b/papers/n4929.html
@@ -0,0 +1,1017 @@
+
+
+
+
+
+N4929
+
+
+N4929 Editors' Report -- Programming Languages -- C++
+
+Date: 2022-12-18
+
+Thomas Köppe (editor, Google DeepMind)
+Jens Maurer (co-editor)
+Dawn Perchik (co-editor, Bright Side Computing, LLC)
+Richard Smith (co-editor, Google Inc)
+
+Email: cxxeditor@gmail.com
+
+Acknowledgements
+
+Thanks to all those who have submitted editorial
+issues
+and to those who have provided pull requests with fixes.
+Thank you also to Dan Raviv and Robert Leahy for drafting motion applications,
+and special thanks to Johel Ernesto Guerrero Peña for providing in-depth review
+of many of the draft motion applications.
+
+New papers
+
+
+- N4928 is the
+current working draft for C++23. It replaces
+N4917.
+- N4929 is this Editors' Report.
+
+
+National body comments on the Committee Draft
+
+N4919 is the C++23 Committee Draft. It received 137 comments from national bodies.
+The working group's responses to the issues so far is noted below.
+
+Editorial comments
+
+The following 11 national body comments are editorial in nature, and fixes for
+them have been applied.
+
+
+- FR 008: Accepted; fixed by 6a1c5050c21ac26fcb2b5b187a0de867713568dc.
+- FR 027: Accepted; fixed by b2fa70faa783827cd38b819409e94da2523333f2.
+New subclauses "contiguous access" and "mulitidimensional access" have been added
+to organize the content for
span
and mdspan
.
+- US 029: Accepted with modifications; fixed by 6c51392a3d1c3c928ef1c20c19e8efe6efed7dc1.
+This issue had already been fixed editorially prior to the NB comments.
+- US 034: Accepted; fixed by 3e825f144f2aa8668c9a1a94066b43799e08a6e7.
+- CA 062: Accepted with modifications; fixed by d829eac310981e688a15b28622a2f048d23eed65.
+A second erroneous comment with the same problem has also been corrected in the same way.
+- US 100: Accepted; fixed by 92de5996625efcb070f99681acd2e39efc206ee2.
+- US 119: Accepted with modifications; fixed by 24e046896029a11f2cb78fd6db21482fb0d4be66.
+We removed the colon after "equivalent to" and the semicolon after "throw",
+and connected the next sentence with a comma.
+- US 120: Accepted; fixed by 3f47d2565f26a9144e8076641ee55bf7be79f896.
+- GB 129: Accepted with modifications; fixed by fb0df97e7d7c2c75bbdf7164c33b0796024ff6d3.
+Reviewed by LWG and considered editorial.
+- GB 136: Accepted; fixed by e0bab4b7f2d8afe5d3939aa49fe6de4fd5e638c6.
+- GB 137: Accepted; fixed by 9512e41e30cf24a8e93e8c8568ff1b5c14398cc6 and 0783dde32073b02b369c7c3893f4f496a83e3658.
+
+
+Non-editorial comments
+
+
+- FR 004: Partially fixed by P1264R2 (LWG poll 12).
+- FR 005: Fixed by CWG2631 (CWG poll 4).
+- FR 009: Duplicate of GB 093
+- FR 019: Duplicate of US 123
+- US 028: Fixed by CWG2640 (CWG poll 4).
+- US 030: Fixed by CWG2639 (CWG poll 4).
+- US 033: Fixed by CWG2242 (CWG poll 3).
+- DE 038: Fixed by P2718R0 (CWG poll 12).
+- US 039: Fixed by CWG2643 (CWG poll 3).
+- US 042: Fixed by CWG2644 (CWG poll 3).
+- US 044: Fixed by CWG2645 (CWG poll 3).
+- US 045: Fixed by CWG2654 (CWG poll 5).
+- US 045: Fixed by CWG2654 (CWG poll 5).
+- DE 046: Fixed by P2564R3 (CWG poll 9).
+- US 047: Fixed by CWG2647 (CWG poll 3).
+- GB 048: Fixed by P2647R1 (CWG poll 8).
+- GB 051: Fixed by CWG2653 (CWG poll 4).
+- US 052: Fixed by CWG2646 (CWG poll 3).
+- CA 054: Fixed by CWG2621 (CWG poll 3).
+- GB 055: Fixed by CWG2538 (CWG poll 6).
+- GB 059: Fixed by P2615R1 (CWG poll 11).
+- US 061: Fixed by P2706R0 (CWG poll 10).
+- CA 063: Fixed by CWG2648 (CWG poll 3).
+- CA 064: Fixed by CWG2649 (CWG poll 3).
+- CA 065: Fixed by P2589R1 (CWG poll 7).
+- US 068: Fixed by CWG2650 (CWG poll 3).
+- US 069: Fixed by CWG2651 (CWG poll 3).
+- GB 070: Fixed by CWG2615 (CWG poll 4).
+- US 071: Fixed by CWG2652 (CWG poll 4).
+- US 073: Fixed by P2167R3 (LWG poll 10).
+- GB 074: Fixed by LWG3818 (LWG poll 8).
+- GB 075: Fixed by LWG3753 (LWG poll 8).
+- GB 085: Fixed by LWG3814 (LWG poll 8).
+- GB 090: Fixed by LWG3823 (LWG poll 8).
+- US 091: Duplicate of GB 093
+- US 092: Duplicate of GB 093
+- GB 093: Fixed by P2505R5 (LWG poll 13).
+- GB 095: Fixed by LWG3824 (LWG poll 8).
+- GB 101: Fixed by LWG3817 (LWG poll 8).
+- US 103: Fixed by LWG3816 (LWG poll 8).
+- US 109: Partially fixed by LWG3717
+ and LWG3737 (LWG poll 8).
+- GB 110: Fixed by LWG3814 (LWG poll 8).
+- US 111: Fixed by P2602R2 (LWG poll 9).
+- US 118: Fixed by LWG3826 (LWG poll 8).
+- US 123: Fixed by P2539R4 (LWG poll 11).
+- US 124: Duplicate of US 123
+- US 125: Fixed by LWG3822 (LWG poll 8).
+- GB 130: Partially fixed by LWG3814 (LWG poll 8).
+- US 132: Fixed by CWG2636 (CWG poll 3).
+
+
+Motions incorporated into working draft
+
+Notes
+
+
+- CWG issue 2602 was withdrawn from the motions. Even though it is part of
+P2709R0,
+it has not been applied.
+- CWG issue 2642 (in
+P2710R0,
+polled in CWG poll 3) was discovered to be incorrect after the WG21 meeting;
+CWG has requested that the issue not be applied and reverted to the working
+group for further discussion. It has not been applied.
+
+
+Core working group polls
+
+CWG poll 1: Accept as Defect Reports all issues except 2635 and 2602 in P2709R0 (Core Language Working Group "ready" Issues for the November, 2022 meeting) and apply their proposed resolutions to the C++ Working Paper.
+
+CWG poll 2: Accept as a Defect Report issue 2635 (Constrained structured bindings) in P2709R0 (Core Language Working Group "ready" Issues for the November, 2022 meeting) and apply its proposed resolution to the C++ Working Paper.
+
+CWG poll 3: Accept as Defect Reports all issues except 2615, 2639, 2640, 2652, 2653, 2654, and 2538 in P2710R0 (Core Language Working Group NB comment resolutions for the November, 2022 meeting) and apply their proposed resolution to the C++ Working Paper, resolving the NB comments as indicated.
+
+CWG poll 4: Apply the proposed resolutions of issues 2615, 2639, 2640, 2652, and 2653 in P2710R0 (Core Language Working Group NB comment resolutions for the November, 2022 meeting) to the C++ Working Paper, resolving the NB comments as indicated.
+
+CWG poll 5: Accept as a Defect Report issue 2654 (Un-deprecation of compound volatile assignments) in P2710R0 (Core Language Working Group NB comment resolutions for the November, 2022 meeting) and apply its proposed resolution to the C++ Working Paper, resolving NB comment US 16-045.
+
+CWG poll 6: Accept as a Defect Report issue 2538 (Can standard attributes be syntactically ignored?) in P2710R0 (Core Language Working Group NB comment resolutions for the November, 2022 meeting) and apply its proposed resolution to the C++ Working Paper, resolving NB comment GB-055.
+
+CWG poll 7: Apply the changes in P2589R1 (static operator[]
) to the C++ Working Paper, resolving NB comment CA-065.
+
+CWG poll 8: Accept as a Defect Report and apply the changes in P2647R1 (Permitting static constexpr variables in constexpr functions) to the C++ Working Paper, resolving NB comment GB-048.
+
+CWG poll 9: Accept as a Defect Report and apply the changes in P2564R3 (consteval
needs to propagate up) to the C++ Working Paper, resolving NB comment DE-046.
+
+CWG poll 10: Accept as a Defect Report and apply the changes in P2706R0 (Redundant specification for defaulted functions) to the C++ Working Paper, resolving NB comment US 26-061.
+
+CWG poll 11: Accept as a Defect Report and apply the changes in P2615R1 (Meaningful exports) to the C++ Working Paper, resolving NB comment GB-059.
+
+CWG poll 12: Apply the changes in P2718R0 (Wording for P2644R1 Fix for Range-based for
Loop) to the C++ Working Paper, resolving NB comment DE-038.
+
+Library working group polls
+
+Polls 1–6 do not concern the C++ Working Paper.
+
+LWG poll 7: Apply the changes for all Ready and Tentatively Ready issues in P2703R0 (C++ Standard Library Ready Issues to be moved in Kona, Nov. 2022) to the C++ working paper.
+
+LWG poll 8: Apply the changes for all Immediate issues in P2704R0 (C++ Standard Library Immediate Issues to be moved in Kona, Nov. 2022) to the C++ working paper.
+
+LWG poll 9: Apply the changes in P2602R2 (Poison Pills are Too Toxic) to the C++ working paper. This addresses ballot comment US 49-111.
+
+LWG poll 10: Apply the changes in P2167R3 (Improved Proposed Wording for LWG 2114 (contextually convertible to bool
)) to the C++ working paper. This addresses ballot comment US 32-073.
+
+LWG poll 11: Apply the changes in P2539R4 (Should the output of std::print
to a terminal be synchronized with the underlying stream?) to the C++ working paper. This addresses ballot comment US 58-123 (and duplicates US 59-124 and FR-001-019).
+
+LWG poll 12: Apply the changes in P1264R2 (Revising the wording of stream input operations) to the C++ working paper. This partially addresses ballot comment FR-018-004.
+
+LWG poll 13: Apply the changes in P2505R5 (Monadic Functions for std::expected
) to the C++ working paper. This addresses ballot comments GB-093, US 36-091, US 35-092, and FR-011-009.
+
+LWG poll 14: Apply the changes in P2696R0 (Introduce Cpp17Swappable as additional convenience requirements) to the C++ working paper.
+
+Noteworthy editorial changes
+
+
+- There were no noteworthy changes to the wording of the approved papers.
+- A new subclause "Arithmetic types" was added. The new subclause contains
+both "integer types" (
<cstdint>
) and the new "extended floating-point
+types" (<stdfloat>
). Previously, the newly added <stdfloat>
synopsis
+was somewhat disconnected and out of context.
+
+
+Minor editorial changes
+
+A log of editorial fixes made to the working draft since N4917 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 7772de4408db8122431169156ea230803cb6bf56
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Sep 6 19:47:21 2022 +0100
+
+ [headers] Reflow table after header additions
+
+commit 3231e8115e93a24806694c36f1eb2d709fe78f4f
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sun Jun 12 15:49:22 2022 +0200
+
+ [basic.align] Recommend alignment-specifier instead of deprecated library facility
+
+commit 37d46b0d41d014febacd9ffe684eb0cf11a5c364
+Author: Chuanqi Xu <yedeng.yd@linux.alibaba.com>
+Date: Tue Jun 7 16:19:08 2022 +0800
+
+ [module.reach] Remove redundant module implementation unit declaration
+
+commit 4e2297b8d2543062edf347ec13341a8356f59605
+Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+Date: Fri Sep 9 04:12:51 2022 +0800
+
+ [thread.stoptoken.syn] "class template", not just "class"; fix spacing (#5799)
+
+commit 20452e91b30d0a299a03d937f443a81537dc03f2
+Author: xmh0511 <970252187@qq.com>
+Date: Fri Sep 9 04:54:01 2022 +0800
+
+ [basic.def.odr] A variable is "named by" an expression (#5534)
+
+ The previous wording, a variable "whose name appears
+ as [an] expression", is less precise and not well-defined.
+
+commit 7260f30c74eaf670b3f3d33a7571f6c055930cd7
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Jan 21 23:27:34 2022 +0100
+
+ [basic.life] Add cross-reference for union member lifetime
+
+commit ba51a5375fa3099e4a85594f2e67d48bc11ec448
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Mon Mar 20 11:58:33 2017 +0000
+
+ [rand.req.seedseq] Rephrase in terms of const types not values
+
+commit 88e574edc674e85911ea1a5b4e87c07457d97bf1
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Mon Mar 20 12:23:12 2017 +0000
+
+ [container.requirements] Rephrase in terms of const types not values
+
+commit 547987d9d203bb7f1f18297ca438ccb18d8fe612
+Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+Date: Wed Sep 14 14:39:16 2022 +0800
+
+ [range.chunk.view.input, range.slide.view] Remove unused name in the deduction guide
+
+commit c774ac4a072efd41e478d72ad57a3dae8b0946ff
+Author: Mathias Stearn <redbeard0531@gmail.com>
+Date: Fri Sep 16 17:46:10 2022 +0200
+
+ [basic.life] Change "complete const object" to "const, complete object" (#5818)
+
+ "Complete object" is a defined term (https://eel.is/c++draft/basic#def:complete_object).
+ Putting "const" in the middle of that leaves it ambiguous whether we are referring to
+ a const-qualified "complete object", or to a complete const object with some other meaning
+ of "complete" (such as "with a complete type").
+
+commit 787ea7683982ed58b1a8bf7bbfb7c77f8d227dce
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Sep 16 21:24:15 2022 +0200
+
+ [diagnostics] Remove 'shall', use 'recommended practice'
+
+commit 9a005c04b91ffa9b92e6a57a03419091f365bc9b
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Sep 16 21:57:46 2022 +0200
+
+ [func.bind.isplace] Add cross-reference to [func.bind.place]
+
+commit 7bd72a7671d9bee0eed11578e325460bcf7fa5a1
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Sep 16 22:09:23 2022 +0200
+
+ [vector.bool.pspc] Index vector<bool>::reference
+
+commit f68d6428f27d5cd722e713262d8986489484ae02
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Sep 16 22:18:36 2022 +0200
+
+ [over.best.ics.general] Split long paragraph
+
+commit 1383e97e21d6d10ac210344d66ab715cfc0f747a
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Thu Sep 15 15:38:58 2022 +0100
+
+ [ranges.syn] Make get overloads freestanding
+
+ These were moved to the synopsis after the P1642 changes to mark nearly
+ everything in the synopsis freestanding, so they were not marked.
+
+commit c70087afe980f9ec339f088babde575e04e185d7
+Author: languagelawyer <38548419+languagelawyer@users.noreply.github.com>
+Date: Sat Sep 17 02:29:45 2022 +0500
+
+ [expr.add] Move note, add example (#4778)
+
+ The original note wasn't quite in the right place.
+ It is moved and made more concrete.
+
+ In the original place of the note we now put
+ a more immediately relevant example.
+
+commit 6000c29e5b9547bf457f4461fd538670144ad88c
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Sep 17 10:05:19 2022 +0200
+
+ [format.string.std] Clarify location of 0x prefix for pointers
+
+commit 718873b512d0687143bbfa00e18edfb0a8b164ce
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Sep 17 08:56:36 2022 +0200
+
+ [expr.prim.lambda.capture] Cross-reference [basic.def.odr] for 'odr-usable'
+
+commit 6a98fd8c1f9ea79961b78f731637ba9fe9d52218
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Sep 17 09:05:57 2022 +0200
+
+ [thread.thread.this] Clarify this_thread::get_id
+
+commit 90c4ba5624a655af5c5d8b11c1137d552f3e0a60
+Author: Casey Carter <Casey@Carter.net>
+Date: Sun Sep 18 14:55:55 2022 -0700
+
+ [headers] Order `<type_traits>` before `<typeindex>` in the header table
+
+ Fixes #5853.
+
+commit 16f92154ce99a5fef26c53c464e8b14ad5b78d79
+Author: A. Jiang <de34@live.cn>
+Date: Tue Sep 20 05:37:31 2022 +0800
+
+ [c.math.hypot3] Fix mis-transcribed parameter type (#5852)
+
+ The paper P1467R9 says that the third parameter of `hypot` should be
+ `_floating-point-type_`, but it was erroneously transcribed as `double`.
+
+commit db26a63222f10cec871656958b3e296e529df67e
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Sep 21 22:18:51 2022 +0100
+
+ [support, etc.] New subclause "Arithmetic types". (#5851)
+
+ The new subclause contains both "integer types" (<cstdint>)
+ and "extended floating-point types" (<stdfloat>).
+
+ Previously, the newly added <stdfloat> synopsis was somewhat
+ disconnected and out of context.
+
+ This change removes the stable labels [cstdint] and [cstdint.general].
+
+commit d462173b5afdc8506d85e5395f2be19311895f2d
+Author: Casey Carter <Casey@Carter.net>
+Date: Mon Sep 19 20:42:44 2022 -0700
+
+ [mdspan.extents.cons] Correct spelling of "dynamic-extents"
+
+commit 14a10ef0948f4709cd1114c489b8e4b919ba7cbc
+Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+Date: Thu Sep 22 05:20:44 2022 +0800
+
+ [unord.general, container.adaptors.general] Fix list of exposition-only alias templates (#5840)
+
+commit aab149233f76df37979d777ffd2b3151c52d48a9
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Thu Sep 22 10:51:46 2022 +0100
+
+ [template.bitset] reorder synopsis and member descriptions
+
+ Group shifts together and use same order for synopsis and detailed
+ descriptions.
+
+ Also remove the unnecessary "for b[i];" comments explaining what
+ operator[] does, and add a comment introducing the group containing
+ count(), size() etc.
+
+commit 63e4a76f780c925a13efeb06955252d7c37ed4ef
+Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+Date: Thu Sep 22 09:30:14 2022 +0800
+
+ [range.as.const.overview] Remove unnecessary ranges namespace qualification
+
+commit 179436adbe60c277fa6512352ee27e26f192bf2b
+Author: Alisdair Meredith <alisdairm@me.com>
+Date: Fri Sep 23 12:45:09 2022 -0400
+
+ [utility.arg.requirements] Present identifiers as itemization (#5856)
+
+ Lists providing the key for names used throughout a subclause are difficult
+ to follow when buried as a single sentence in a paragraph. This change updates
+ the key to tables 29-36 in [utility.arg.requirements] to a bulleted list
+ following the examples set elsewhere.
+
+ Each key is now consistently introduced with the word "denotes", following
+ the precedent set by similar bullet lists.
+
+ It is not at all coincidental that this also resolves pagination issues
+ at the end of the page, so that the floating tables to not float into the
+ middle of a sentence in the following section.
+
+commit 24d54e30506a62ef41cf4bd0132fbdba45bb6dda
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Tue Sep 27 11:56:32 2022 +0100
+
+ [futures.task.members] Add missing explicit to packaged_task ctor
+
+commit 842424bd228b79876437a1a9393f20f00033476a
+Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+Date: Wed Sep 28 16:39:59 2022 +0800
+
+ [futures.task.members] Correct capitalization
+
+commit d3ddc0906638bb30b5a3ce0f4033148e9a8ed1ff
+Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+Date: Thu Sep 29 15:49:06 2022 +0800
+
+ [container.rev.reqmts] Correct capitalization
+
+commit a7f17181ef5b59ad728b421a83975209406fa037
+Author: Daniel Krügler <daniel.kruegler@gmail.com>
+Date: Mon Oct 3 17:59:20 2022 +0200
+
+ [sequence.reqmts] Use "lvalues of type T are swappable" (#5878)
+
+commit dd6c7f4012489325bdd65a40cd121b3d25008b0e
+Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+Date: Tue Oct 4 04:41:26 2022 +0800
+
+ [associative.reqmts.general] Fix typo in namespace name (#5881)
+
+commit 42c7b3fb3a3cb11bc1af418cfdd395ecf314aa43
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Oct 4 13:08:17 2022 +0100
+
+ [intro.defs] Update hyperlink according to SC22 requirements
+
+commit 05019b35890b79374fac180a9a9ff9e7cf8d7595
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Oct 4 15:19:01 2022 +0100
+
+ Foreword placeholder
+
+commit b0fab58d4f2b12defdaf7c3ddfb2ddcd1f30e1b5
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Wed Oct 5 11:27:23 2022 +0100
+
+ [temp.local] Fix typo in "inject-class-name" (#5889)
+
+commit f6c5d4512d4b32d63d66669555ab976b315d439c
+Author: mordante <koraq@xs4all.nl>
+Date: Mon Oct 10 17:50:51 2022 +0200
+
+ [format.string.escaped] Fix example of invalid code unit (#5890)
+
+ Example 5 should only have one invalid code unit. The second code unit is a valid code point.
+
+ This issue was already in the paper P2286R8 "Formatting Ranges".
+
+commit 5f26c516a659cdf3f0ea007cf6c90c690cccc3b6
+Author: Eelis van der Weegen <eelis@eelis.net>
+Date: Tue Oct 11 04:36:08 2022 +0200
+
+ [bibliography] Remove stray closing parenthesis.
+
+commit 6c51392a3d1c3c928ef1c20c19e8efe6efed7dc1
+Author: Corentin Jabot <corentinjabot@gmail.com>
+Date: Wed Oct 19 22:29:09 2022 +0200
+
+ [intro.defs] Move the definition of "multibyte character" to library
+
+ This address the US-2 NB comment as per the direction voted on
+ by SG-16.
+
+ No use of "multibyte character" remains before [multibyte.strings].
+
+commit 33e56641d63c5993d288082cf264a733464ff75c
+Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
+Date: Tue Oct 25 17:48:03 2022 -0400
+
+ [stack.syn, queue.syn] Add xref comments to class synopses (#5913)
+
+commit 90aa7729b9a926622581354284ecf294a56e410b
+Author: Will Hawkins <8715530+hawkinsw@users.noreply.github.com>
+Date: Tue Nov 1 04:37:52 2022 -0400
+
+ [range.dangling] Replace "tag type" with just "type" (#5922)
+
+ The extra word "tag" was not adding any value and was potentially,
+ confusing; e.g. the "dangling" type is not like, say, an iterator tag
+ that would be used for overload resolution.
+
+commit fd998c52af2dc6b9c73098fdbd5a22444a358448
+Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
+Date: Tue Nov 1 10:45:53 2022 -0400
+
+ [flat.set] [flat.multiset] Use value_type, not key_type
+
+ For consistency with the other `set`, `unordered_set` containers.
+ `key_type` is a synonym for `value_type`, and there's no reason
+ the flat containers need to depart from existing practice here.
+
+commit 48ecaaec300de4a8176c116408cac915142166ce
+Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
+Date: Mon Nov 7 14:02:40 2022 -0500
+
+ [flat.multiset.modifiers] Fix typo in "multiset" (#5927)
+
+commit 45d9a5ba5aee1e3c4da8938e12376b36a7147d63
+Author: Eric41293 <eric41293@comcast.net>
+Date: Mon Nov 7 11:11:58 2022 -0800
+
+ [climits.syn] Correct note about types of macros (#5926)
+
+ This note was added apparently as a response to LWG 416. However, there may have been a misunderstanding of the C standard, and in fact only the macros for `{signed,unsigned,} char` and `{signed,unsigned} int` have a different type.
+
+commit f41cd00273e6ee7ff1a29446b21f230c28bf1a9f
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Mon Nov 7 20:59:54 2022 +0000
+
+ [time.clock.system.nonmembers, time.zone.zonedtime.nonmembers] Add <charT> to STATICALLY-WIDEN (#5934)
+
+commit ef7d0e234722d2ef8b4ec069b6f929dc083d8dc7
+Author: Ed Catmur <edward.catmur@mavensecurities.com>
+Date: Tue Sep 20 18:12:45 2022 +0100
+
+ [meta, thread] Add or amend references to func.{require,invoke}
+
+commit 0d5c9b9310b2f6c6c4259665e1e680936babdc3d
+Author: Eric41293 <eric41293@comcast.net>
+Date: Mon Nov 7 15:54:55 2022 -0800
+
+ [meta.type.synop] Capitalize NTTP name (#5921)
+
+commit 0959b5c200a6f2b543e2d656850917b8d788767c
+Author: Hui <65944694+huixie90@users.noreply.github.com>
+Date: Tue Nov 8 00:49:15 2022 +0000
+
+ [range.drop.while.overview] Use string_view rather than string literal (#5897)
+
+ The string literal would have been treated as a `const char*`, which is not a range.
+
+commit 720c3ae24a68fda02a6372eda13ec3f9c6a1a39b
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Tue Nov 8 02:01:34 2022 +0000
+
+ [time.format] Use basic_ostringstream<charT> instead of ostringstream (#5932)
+
+commit 8739d316f2a55c633963b26b748681ff16498887
+Author: Marc Mutz <94039187+marcmutz@users.noreply.github.com>
+Date: Tue Nov 8 03:05:45 2022 +0100
+
+ [meta.const.eval] Add is_constant_evaluated to index of library names (#5898)
+
+ Previously, only its feature-test macro was listed there.
+
+commit 4c442cf93f03a44ec1f6a93875043a3aca7c5b9b
+Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
+Date: Mon Nov 7 23:38:36 2022 -0400
+
+ [class.union.general] Attach example to its note (#5882)
+
+commit 65c494b9a4a5a4fab500733441c04e50a787d318
+Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+Date: Tue Nov 8 15:51:21 2022 +0800
+
+ [mdspan.extents.expo] Remove redundant "// exposition only" (#5907)
+
+commit b766881dda1d0201d98710b11efda3491a84b4f2
+Author: languagelawyer <38548419+languagelawyer@users.noreply.github.com>
+Date: Tue Nov 8 13:15:07 2022 +0500
+
+ [dcl.init.list] Specify the type of the prvalue (#5919)
+
+commit 6e035b52e28e95211a39ffb552851499432b2c6e
+Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
+Date: Tue Nov 8 15:30:29 2022 -0400
+
+ [ratio.ratio] Use symbol "sgn" for the signum function (#5925)
+
+commit 89269f8e548b993b239f2c0f5ecc071ee7f54c9a
+Author: Blackteahamburger <blackteahamburger@outlook.com>
+Date: Wed Nov 9 04:12:59 2022 +0800
+
+ [dcl.link] Add missing restriction to language linkage application (#5892)
+
+ A language linkage specification should only apply to entities that do in fact have language linkage.
+
+commit ea77b2fa83ddac0c52c1b505ff666328a2a8f558
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Nov 9 00:34:26 2022 +0100
+
+ [temp.deduct.general] Fix typo in comment in example
+
+commit 0c196ec375993000547e8913abb4c4ce703144cb
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Nov 10 15:32:56 2022 +0100
+
+ [temp.deduct.conv] Remove misleading paragraph break
+
+commit 0cd0c33f648d1304160e6dcb1856affd71b3ebbb
+Author: Casey Carter <Casey@Carter.net>
+Date: Fri Nov 11 18:35:53 2022 -0800
+
+ [mdspan.extents.cons] "constexpr" should precede "explicit"
+
+ In library function declarations, the `constexpr` specifier always precedes the `explicit` specifier per our standing style guide.
+
+commit 608c152dbae69d335d7238cdd5d178e048e2a1fd
+Author: Casey Carter <Casey@Carter.net>
+Date: Mon Nov 14 10:48:18 2022 -0800
+
+ [vector.bool.pspc] Replace `constexpr static` with `static constexpr`
+
+ As preferred by our style guide.
+
+commit d829eac310981e688a15b28622a2f048d23eed65
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Thu Nov 10 07:43:32 2022 +0000
+
+ [class.inhctor.init] Fix explanation of "error:" in example
+
+ The correct explanation is that classes `B1` and `D1` do not have
+ default constructors, not that they have deleted default constructors.
+
+ Fixes NB CA 062 (C++23 CD).
+
+commit 6a1c5050c21ac26fcb2b5b187a0de867713568dc
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Nov 8 23:35:00 2022 +0000
+
+ [diff.cpp20.library] Add missing new headers
+
+ Fixes NB FR 008 (C++23 CD).
+
+commit b2fa70faa783827cd38b819409e94da2523333f2
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Nov 9 18:50:56 2022 +0000
+
+ [views] Subclauses for contiguous and multidimensional access
+
+ This organises the material for <span> and <mdspan> into separate
+ subclauses, rather than having all constituent parts being siblings in
+ the same subclause. Even though we now have some subclauses six levels
+ deep, this seems like an improvement. As a drive-by, this allows us to
+ move a subclause on a non-member span helper function up one level,
+ where it is more appropriate.
+
+ Fixes NB FR 027 (C++23 CD).
+
+commit e0bab4b7f2d8afe5d3939aa49fe6de4fd5e638c6
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Thu Nov 10 02:16:11 2022 +0000
+
+ [concepts index] Describe exposition-only concepts
+
+ Fixes NB GB 136 (C++23 CD).
+
+commit 9512e41e30cf24a8e93e8c8568ff1b5c14398cc6
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Fri Nov 11 19:31:11 2022 +0000
+
+ [general, library index] Describe exposition-only entities
+
+ Partially fixes NB GB 137 (C++23 CD).
+
+commit 0783dde32073b02b369c7c3893f4f496a83e3658
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Fri Nov 11 19:33:33 2022 +0000
+
+ [func.wrap.move.ctor] Move private expos member to general index
+
+ The private, exposition-only data member is not useful in the library
+ index. However, there seems no reason to not show it in the general
+ index, so we move the index entry from the library index to the
+ general index.
+
+ Partially fixes NB GB 137 (C++23 CD).
+
+commit 3e825f144f2aa8668c9a1a94066b43799e08a6e7
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Nov 8 21:31:30 2022 +0000
+
+ [basic.scope.scope] Fix indentation in example
+
+ Fixes NB US 034 (C++23 CD).
+
+commit 92de5996625efcb070f99681acd2e39efc206ee2
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Nov 8 23:24:35 2022 +0000
+
+ [unord.req.general] Fix garbled end of sentence
+
+ This was an editorial mistake introduced by the transformation of the
+ requirement tables into regular paragraphs.
+
+ Fixes NB US 100 (C++23 CD).
+
+commit 24e046896029a11f2cb78fd6db21482fb0d4be66
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Nov 8 21:02:31 2022 +0000
+
+ [coro.generator.promise] Use "equivalent to `throw`, ..."
+
+ Our style guide says that "equivalent to <expression>" is the
+ appropriate style for an expression of type `void`, which is the case
+ for `throw`. This avoids the awkward situation of having "equivalent
+ to: `throws;`" appear in the middle of a paragraph without proper
+ terminal punctuation.
+
+ Fixes NB US 119 (C++23 CD).
+
+commit 3f47d2565f26a9144e8076641ee55bf7be79f896
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Nov 8 21:27:56 2022 +0000
+
+ [coro.generator.promise] Remove unused name "x"
+
+ Fixes NB US 120 (C++23 CD).
+
+commit fb0df97e7d7c2c75bbdf7164c33b0796024ff6d3
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Thu Nov 17 08:44:05 2022 +0000
+
+ [atomics] Replace integral and floating-point placeholders (#5939)
+
+ Fixes NB GB 129 (C++23 CD).
+
+commit 0bb57d5ebffa7170fbc80724f55a6ac2a82f2e83
+Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+Date: Fri Nov 25 14:56:24 2022 +0800
+
+ [format.arg] Add std:: for forward
+
+commit c88fb46327d87d78d571b7e1076e1916eaf7e310
+Author: Dawn Perchik <dawn@brightsidecomputing.com>
+Date: Tue Nov 15 07:46:41 2022 -0800
+
+ [expr.unary.op] Say "the ~ operator" consistently, remove "unary"
+
+ We are currently using the term "unary complement operator" to refer
+ to the "~" operator without ever giving it that name. This change
+ removes the use of that undefined term.
+
+commit bef02b89464fe6f4be3926d62defc92986ae4532
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Tue Nov 22 16:28:42 2022 +0000
+
+ [expr.unary.op] Notes naming unary ops as {ones',two's} complement
+
+ The terms "one's complement" and "two's complement" are well-known,
+ and it is useful to associate them with these operators.
+
+commit 020a312b2aa513a992e488d82db55fd0cd4fa025
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Nov 16 17:48:12 2022 +0000
+
+ [fs.rec.dir.itr.nonmembers] "for" is a keyword in "range-based for"
+
+commit cee095e75a97fb88a7053e360b3bc06d36a6b687
+Author: Alisdair Meredith <alisdairm@me.com>
+Date: Fri Dec 16 06:51:26 2022 +0700
+
+ [depr.conversions.string] remove redundent respecification (#6004)
+
+ There are several typedef names defined precisely in the deprecated code conversion
+ facets classes that are redundantly respecified in text. Nowhere else in the library
+ does this; any specified typedef names are _see below_ definitions, not repeats of
+ the class definition. Needless redundancy is always a risk of divergence, however
+ small, so remove the respecification in text form.
+
+commit 1bb52db31be002f04ea5977f9900ba4174c7155e
+Author: Anoop Rana <93918384+ranaanoop@users.noreply.github.com>
+Date: Fri Dec 16 05:23:57 2022 +0530
+
+ [concepts.object] Change "built-in" to "fundamental" types (#6012)
+
+commit ce1cc3b011099b6228b18dad937911c6ea67d309
+Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
+Date: Sun Dec 11 17:03:41 2022 -0400
+
+ [expr.const] Remove redundant "ill-formed" in "error" comment
+
+commit 5d43f0137776fa112d0ffd6ba0e34df34a4cb820
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Tue Dec 13 12:52:00 2022 +0000
+
+ [time.zone.leap.members] update note about leap seconds
+
+commit fd20d4ea9f3ea8653b17169aad61eec843b71718
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Wed Nov 23 14:45:43 2022 +0000
+
+ [time.zone.zonedtime.overview] Rename parameters to match later definitions
+
+commit 137728f0830824c6058648a846376eec80e5cab3
+Author: Michael Florian Hava <mfh@live.at>
+Date: Fri Dec 16 02:10:55 2022 +0100
+
+ [coro.generator.promise] Fix template parameters (#6009)
+
+ Some of the template parameters of `yield_value` were inconsistent,
+ and the synopsis contained an outright typo. This change uses `R2`
+ consistently since the parameter is a reference.
+
+commit 5d6099c3df78922ee5b5f1d1c42a5c762d246df0
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Thu Dec 15 23:31:26 2022 +0000
+
+ [formatter.requirements] Remove one level of list nesting
+
+commit 9e41a1c27de2f676badacbe0c1aac783063b7cd6
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Nov 16 19:43:58 2022 +0000
+
+ [time.clock.req] Make list item end with comma, not full stop.
+
+ Also reformat the itemization source to be more edit-friendly.
+
+commit 5ef31f3fc1531d9e6e923cb57bf6e5ecec59ed4e
+Author: languagelawyer <language.lawyer@gmail.com>
+Date: Thu Jun 25 10:54:17 2020 +0300
+
+ [expr.unary.op] Fix usage of "result"
+
+commit 8c60752c7eb28e1ff1cc9e088d7836957356f559
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Tue Apr 26 10:18:11 2022 +0100
+
+ [optional.ctor], [expected.object.ctor] Add converts-from-any-cvref
+
+commit 405b46f50ce6c7458e94db7b4528fc267e2b67c3
+Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+Date: Sat Dec 17 00:14:51 2022 +0800
+
+ [mdspan.mdspan.overview] Add default template arguments for mdspan (#6018)
+
+ We usually restate the default template arguments in the class synopsis,
+ so that the information is in one place and one does not need to also refer
+ to the header synopsis.
+
+commit ae88bb581d32f1939987c0a834fe3f6011a9d003
+Author: frederick-vs-ja <de34@live.cn>
+Date: Fri Dec 16 21:25:31 2022 +0800
+
+ [range.repeat] Change `W`/`WArgs` to `T`/`TArgs`
+
+commit 0a1f1e147c75ce9220de3488103ca880b6b8e49f
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Fri Dec 16 17:19:08 2022 +0000
+
+ [concept.copyconstructible] Avoid "possibly \tcode{const}"
+
+ A small rewrite avoids the phrase "possibly \tcode{const}",
+ which we would like to remove entirely in favour of just
+ "possibly const".
+
+commit f058decdf9c7dea0461f723df72f5093f5e92b11
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Fri Dec 16 17:31:47 2022 +0000
+
+ Replace "possibly \tcode{const}" with "possibly const"
+
+ The "const" here is not syntax, but just normal text.
+ This is similar to "inline" and "public", which have
+ previously been cleaned up similarly.
+
+commit 9ac55553459e15c84db6d8072c93787d41ef7ccf
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Jun 4 00:29:30 2021 +0200
+
+ [lib] Drop 'inline' from 'inline constexpr' variable templates.
+
+ Since CWG2387, constexpr variable templates have external linkage.
+
+
+
diff --git a/papers/n4929.md b/papers/n4929.md
new file mode 100644
index 0000000000..36adf1e8d4
--- /dev/null
+++ b/papers/n4929.md
@@ -0,0 +1,868 @@
+# N4929 Editors' Report -- Programming Languages -- C++
+
+Date: 2022-12-18
+
+Thomas Köppe (editor, Google DeepMind)
+Jens Maurer (co-editor)
+Dawn Perchik (co-editor, Bright Side Computing, LLC)
+Richard Smith (co-editor, Google Inc)
+
+Email: `cxxeditor@gmail.com`
+
+## Acknowledgements
+
+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.
+Thank you also to Dan Raviv and Robert Leahy for drafting motion applications,
+and special thanks to Johel Ernesto Guerrero Peña for providing in-depth review
+of many of the draft motion applications.
+
+## New papers
+
+ * [N4928](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4928.pdf) is the
+ current working draft for C++23. It replaces
+ [N4917](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4917.pdf).
+ * N4929 is this Editors' Report.
+
+## National body comments on the Committee Draft
+
+N4919 is the C++23 Committee Draft. It received 137 comments from national bodies.
+The working group's responses to the issues so far is noted below.
+
+### Editorial comments
+
+The following 11 national body comments are editorial in nature, and fixes for
+them have been applied.
+
+ * **FR 008:** Accepted; fixed by 6a1c5050c21ac26fcb2b5b187a0de867713568dc.
+ * **FR 027:** Accepted; fixed by b2fa70faa783827cd38b819409e94da2523333f2.
+ New subclauses "contiguous access" and "mulitidimensional access" have been added
+ to organize the content for `span` and `mdspan`.
+ * **US 029:** Accepted with modifications; fixed by 6c51392a3d1c3c928ef1c20c19e8efe6efed7dc1.
+ This issue had already been fixed editorially prior to the NB comments.
+ * **US 034:** Accepted; fixed by 3e825f144f2aa8668c9a1a94066b43799e08a6e7.
+ * **CA 062:** Accepted with modifications; fixed by d829eac310981e688a15b28622a2f048d23eed65.
+ A second erroneous comment with the same problem has also been corrected in the same way.
+ * **US 100:** Accepted; fixed by 92de5996625efcb070f99681acd2e39efc206ee2.
+ * **US 119:** Accepted with modifications; fixed by 24e046896029a11f2cb78fd6db21482fb0d4be66.
+ We removed the colon after "equivalent to" and the semicolon after "throw",
+ and connected the next sentence with a comma.
+ * **US 120:** Accepted; fixed by 3f47d2565f26a9144e8076641ee55bf7be79f896.
+ * **GB 129:** Accepted with modifications; fixed by fb0df97e7d7c2c75bbdf7164c33b0796024ff6d3.
+ Reviewed by LWG and considered editorial.
+ * **GB 136:** Accepted; fixed by e0bab4b7f2d8afe5d3939aa49fe6de4fd5e638c6.
+ * **GB 137:** Accepted; fixed by 9512e41e30cf24a8e93e8c8568ff1b5c14398cc6 and 0783dde32073b02b369c7c3893f4f496a83e3658.
+
+### Non-editorial comments
+
+* **FR 004:** Partially fixed by [P1264R2](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1264r2.pdf) (LWG poll 12).
+* **FR 005:** Fixed by [CWG2631](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2631) (CWG poll 4).
+* **FR 009:** Duplicate of GB 093
+* **FR 019:** Duplicate of US 123
+* **US 028:** Fixed by [CWG2640](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2640) (CWG poll 4).
+* **US 030:** Fixed by [CWG2639](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2639) (CWG poll 4).
+* **US 033:** Fixed by [CWG2242](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2242) (CWG poll 3).
+* **DE 038:** Fixed by [P2718R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2718r0.html) (CWG poll 12).
+* **US 039:** Fixed by [CWG2643](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2643) (CWG poll 3).
+* **US 042:** Fixed by [CWG2644](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2644) (CWG poll 3).
+* **US 044:** Fixed by [CWG2645](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2645) (CWG poll 3).
+* **US 045:** Fixed by [CWG2654](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2654) (CWG poll 5).
+* **US 045:** Fixed by [CWG2654](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2654) (CWG poll 5).
+* **DE 046:** Fixed by [P2564R3](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2564r3.html) (CWG poll 9).
+* **US 047:** Fixed by [CWG2647](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2647) (CWG poll 3).
+* **GB 048:** Fixed by [P2647R1](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2647r1.html) (CWG poll 8).
+* **GB 051:** Fixed by [CWG2653](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2653) (CWG poll 4).
+* **US 052:** Fixed by [CWG2646](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2646) (CWG poll 3).
+* **CA 054:** Fixed by [CWG2621](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2621) (CWG poll 3).
+* **GB 055:** Fixed by [CWG2538](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2538) (CWG poll 6).
+* **GB 059:** Fixed by [P2615R1](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2615r1.html) (CWG poll 11).
+* **US 061:** Fixed by [P2706R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2706r0.html) (CWG poll 10).
+* **CA 063:** Fixed by [CWG2648](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2648) (CWG poll 3).
+* **CA 064:** Fixed by [CWG2649](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2649) (CWG poll 3).
+* **CA 065:** Fixed by [P2589R1](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2589r1.pdf) (CWG poll 7).
+* **US 068:** Fixed by [CWG2650](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2650) (CWG poll 3).
+* **US 069:** Fixed by [CWG2651](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2651) (CWG poll 3).
+* **GB 070:** Fixed by [CWG2615](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2615) (CWG poll 4).
+* **US 071:** Fixed by [CWG2652](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2652) (CWG poll 4).
+* **US 073:** Fixed by [P2167R3](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2167r3.html) (LWG poll 10).
+* **GB 074:** Fixed by [LWG3818](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html#3818) (LWG poll 8).
+* **GB 075:** Fixed by [LWG3753](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html#3753) (LWG poll 8).
+* **GB 085:** Fixed by [LWG3814](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html#3814) (LWG poll 8).
+* **GB 090:** Fixed by [LWG3823](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html#3823) (LWG poll 8).
+* **US 091:** Duplicate of GB 093
+* **US 092:** Duplicate of GB 093
+* **GB 093:** Fixed by [P2505R5](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2505r5.html) (LWG poll 13).
+* **GB 095:** Fixed by [LWG3824](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html#3824) (LWG poll 8).
+* **GB 101:** Fixed by [LWG3817](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html#3817) (LWG poll 8).
+* **US 103:** Fixed by [LWG3816](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html#3816) (LWG poll 8).
+* **US 109:** Partially fixed by [LWG3717](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html#3717)
+ and [LWG3737](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html#3737) (LWG poll 8).
+* **GB 110:** Fixed by [LWG3814](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html#3814) (LWG poll 8).
+* **US 111:** Fixed by [P2602R2](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2602r2.html) (LWG poll 9).
+* **US 118:** Fixed by [LWG3826](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html#3826) (LWG poll 8).
+* **US 123:** Fixed by [P2539R4](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2539r4.html) (LWG poll 11).
+* **US 124:** Duplicate of US 123
+* **US 125:** Fixed by [LWG3822](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html#3822) (LWG poll 8).
+* **GB 130:** Partially fixed by [LWG3814](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html#3814) (LWG poll 8).
+* **US 132:** Fixed by [CWG2636](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2636) (CWG poll 3).
+
+## Motions incorporated into working draft
+
+### Notes
+
+ * CWG issue 2602 was withdrawn from the motions. Even though it is part of
+ [P2709R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2709r0.html),
+ it has not been applied.
+ * CWG issue 2642 (in
+ [P2710R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2642),
+ polled in CWG poll 3) was discovered to be incorrect after the WG21 meeting;
+ CWG has requested that the issue not be applied and reverted to the working
+ group for further discussion. It has not been applied.
+
+### Core working group polls
+
+CWG poll 1: Accept as Defect Reports all issues except 2635 and 2602 in [P2709R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2709r0.html) (Core Language Working Group "ready" Issues for the November, 2022 meeting) and apply their proposed resolutions to the C++ Working Paper.
+
+CWG poll 2: Accept as a Defect Report issue 2635 (Constrained structured bindings) in [P2709R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2709r0.html) (Core Language Working Group "ready" Issues for the November, 2022 meeting) and apply its proposed resolution to the C++ Working Paper.
+
+CWG poll 3: Accept as Defect Reports all issues except 2615, 2639, 2640, 2652, 2653, 2654, and 2538 in [P2710R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html) (Core Language Working Group NB comment resolutions for the November, 2022 meeting) and apply their proposed resolution to the C++ Working Paper, resolving the NB comments as indicated.
+
+CWG poll 4: Apply the proposed resolutions of issues 2615, 2639, 2640, 2652, and 2653 in [P2710R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html) (Core Language Working Group NB comment resolutions for the November, 2022 meeting) to the C++ Working Paper, resolving the NB comments as indicated.
+
+CWG poll 5: Accept as a Defect Report issue 2654 (Un-deprecation of compound volatile assignments) in [P2710R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html) (Core Language Working Group NB comment resolutions for the November, 2022 meeting) and apply its proposed resolution to the C++ Working Paper, resolving NB comment US 16-045.
+
+CWG poll 6: Accept as a Defect Report issue 2538 (Can standard attributes be syntactically ignored?) in [P2710R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html) (Core Language Working Group NB comment resolutions for the November, 2022 meeting) and apply its proposed resolution to the C++ Working Paper, resolving NB comment GB-055.
+
+CWG poll 7: Apply the changes in [P2589R1](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2589r1.pdf) (`static operator[]`) to the C++ Working Paper, resolving NB comment CA-065.
+
+CWG poll 8: Accept as a Defect Report and apply the changes in [P2647R1](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2647r1.html) (Permitting static constexpr variables in constexpr functions) to the C++ Working Paper, resolving NB comment GB-048.
+
+CWG poll 9: Accept as a Defect Report and apply the changes in [P2564R3](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2564r3.html) (`consteval` needs to propagate up) to the C++ Working Paper, resolving NB comment DE-046.
+
+CWG poll 10: Accept as a Defect Report and apply the changes in [P2706R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2706r0.html) (Redundant specification for defaulted functions) to the C++ Working Paper, resolving NB comment US 26-061.
+
+CWG poll 11: Accept as a Defect Report and apply the changes in [P2615R1](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2615r1.html) (Meaningful exports) to the C++ Working Paper, resolving NB comment GB-059.
+
+CWG poll 12: Apply the changes in [P2718R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2718r0.html) (Wording for P2644R1 Fix for Range-based `for` Loop) to the C++ Working Paper, resolving NB comment DE-038.
+
+### Library working group polls
+
+Polls 1–6 do not concern the C++ Working Paper.
+
+LWG poll 7: Apply the changes for all Ready and Tentatively Ready issues in [P2703R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2703r0.html) (C++ Standard Library Ready Issues to be moved in Kona, Nov. 2022) to the C++ working paper.
+
+LWG poll 8: Apply the changes for all Immediate issues in [P2704R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2704r0.html) (C++ Standard Library Immediate Issues to be moved in Kona, Nov. 2022) to the C++ working paper.
+
+LWG poll 9: Apply the changes in [P2602R2](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2602r2.html) (Poison Pills are Too Toxic) to the C++ working paper. This addresses ballot comment US 49-111.
+
+LWG poll 10: Apply the changes in [P2167R3](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2167r3.html) (Improved Proposed Wording for LWG 2114 (contextually convertible to `bool`)) to the C++ working paper. This addresses ballot comment US 32-073.
+
+LWG poll 11: Apply the changes in [P2539R4](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2539r4.html) (Should the output of `std::print` to a terminal be synchronized with the underlying stream?) to the C++ working paper. This addresses ballot comment US 58-123 (and duplicates US 59-124 and FR-001-019).
+
+LWG poll 12: Apply the changes in [P1264R2](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1264r2.pdf) (Revising the wording of stream input operations) to the C++ working paper. This partially addresses ballot comment FR-018-004.
+
+LWG poll 13: Apply the changes in [P2505R5](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2505r5.html) (Monadic Functions for `std::expected`) to the C++ working paper. This addresses ballot comments GB-093, US 36-091, US 35-092, and FR-011-009.
+
+LWG poll 14: Apply the changes in [P2696R0](http://open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2696r0.html) (Introduce _Cpp17Swappable_ as additional convenience requirements) to the C++ working paper.
+
+### Noteworthy editorial changes
+
+* There were no noteworthy changes to the wording of the approved papers.
+* A new subclause "Arithmetic types" was added. The new subclause contains
+ both "integer types" (``) and the new "extended floating-point
+ types" (``). Previously, the newly added `` synopsis
+ was somewhat disconnected and out of context.
+
+### Minor editorial changes
+
+A log of editorial fixes made to the working draft since N4917 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/n4917...n4928).
+
+ commit 7772de4408db8122431169156ea230803cb6bf56
+ Author: Thomas Köppe
+ Date: Tue Sep 6 19:47:21 2022 +0100
+
+ [headers] Reflow table after header additions
+
+ commit 3231e8115e93a24806694c36f1eb2d709fe78f4f
+ Author: Jens Maurer
+ Date: Sun Jun 12 15:49:22 2022 +0200
+
+ [basic.align] Recommend alignment-specifier instead of deprecated library facility
+
+ commit 37d46b0d41d014febacd9ffe684eb0cf11a5c364
+ Author: Chuanqi Xu
+ Date: Tue Jun 7 16:19:08 2022 +0800
+
+ [module.reach] Remove redundant module implementation unit declaration
+
+ commit 4e2297b8d2543062edf347ec13341a8356f59605
+ Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+ Date: Fri Sep 9 04:12:51 2022 +0800
+
+ [thread.stoptoken.syn] "class template", not just "class"; fix spacing (#5799)
+
+ commit 20452e91b30d0a299a03d937f443a81537dc03f2
+ Author: xmh0511 <970252187@qq.com>
+ Date: Fri Sep 9 04:54:01 2022 +0800
+
+ [basic.def.odr] A variable is "named by" an expression (#5534)
+
+ The previous wording, a variable "whose name appears
+ as [an] expression", is less precise and not well-defined.
+
+ commit 7260f30c74eaf670b3f3d33a7571f6c055930cd7
+ Author: Jens Maurer
+ Date: Fri Jan 21 23:27:34 2022 +0100
+
+ [basic.life] Add cross-reference for union member lifetime
+
+ commit ba51a5375fa3099e4a85594f2e67d48bc11ec448
+ Author: Jonathan Wakely
+ Date: Mon Mar 20 11:58:33 2017 +0000
+
+ [rand.req.seedseq] Rephrase in terms of const types not values
+
+ commit 88e574edc674e85911ea1a5b4e87c07457d97bf1
+ Author: Jonathan Wakely
+ Date: Mon Mar 20 12:23:12 2017 +0000
+
+ [container.requirements] Rephrase in terms of const types not values
+
+ commit 547987d9d203bb7f1f18297ca438ccb18d8fe612
+ Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+ Date: Wed Sep 14 14:39:16 2022 +0800
+
+ [range.chunk.view.input, range.slide.view] Remove unused name in the deduction guide
+
+ commit c774ac4a072efd41e478d72ad57a3dae8b0946ff
+ Author: Mathias Stearn
+ Date: Fri Sep 16 17:46:10 2022 +0200
+
+ [basic.life] Change "complete const object" to "const, complete object" (#5818)
+
+ "Complete object" is a defined term (https://eel.is/c++draft/basic#def:complete_object).
+ Putting "const" in the middle of that leaves it ambiguous whether we are referring to
+ a const-qualified "complete object", or to a complete const object with some other meaning
+ of "complete" (such as "with a complete type").
+
+ commit 787ea7683982ed58b1a8bf7bbfb7c77f8d227dce
+ Author: Jens Maurer
+ Date: Fri Sep 16 21:24:15 2022 +0200
+
+ [diagnostics] Remove 'shall', use 'recommended practice'
+
+ commit 9a005c04b91ffa9b92e6a57a03419091f365bc9b
+ Author: Jens Maurer
+ Date: Fri Sep 16 21:57:46 2022 +0200
+
+ [func.bind.isplace] Add cross-reference to [func.bind.place]
+
+ commit 7bd72a7671d9bee0eed11578e325460bcf7fa5a1
+ Author: Jens Maurer
+ Date: Fri Sep 16 22:09:23 2022 +0200
+
+ [vector.bool.pspc] Index vector::reference
+
+ commit f68d6428f27d5cd722e713262d8986489484ae02
+ Author: Jens Maurer
+ Date: Fri Sep 16 22:18:36 2022 +0200
+
+ [over.best.ics.general] Split long paragraph
+
+ commit 1383e97e21d6d10ac210344d66ab715cfc0f747a
+ Author: Jonathan Wakely
+ Date: Thu Sep 15 15:38:58 2022 +0100
+
+ [ranges.syn] Make get overloads freestanding
+
+ These were moved to the synopsis after the P1642 changes to mark nearly
+ everything in the synopsis freestanding, so they were not marked.
+
+ commit c70087afe980f9ec339f088babde575e04e185d7
+ Author: languagelawyer <38548419+languagelawyer@users.noreply.github.com>
+ Date: Sat Sep 17 02:29:45 2022 +0500
+
+ [expr.add] Move note, add example (#4778)
+
+ The original note wasn't quite in the right place.
+ It is moved and made more concrete.
+
+ In the original place of the note we now put
+ a more immediately relevant example.
+
+ commit 6000c29e5b9547bf457f4461fd538670144ad88c
+ Author: Jens Maurer
+ Date: Sat Sep 17 10:05:19 2022 +0200
+
+ [format.string.std] Clarify location of 0x prefix for pointers
+
+ commit 718873b512d0687143bbfa00e18edfb0a8b164ce
+ Author: Jens Maurer
+ Date: Sat Sep 17 08:56:36 2022 +0200
+
+ [expr.prim.lambda.capture] Cross-reference [basic.def.odr] for 'odr-usable'
+
+ commit 6a98fd8c1f9ea79961b78f731637ba9fe9d52218
+ Author: Jens Maurer
+ Date: Sat Sep 17 09:05:57 2022 +0200
+
+ [thread.thread.this] Clarify this_thread::get_id
+
+ commit 90c4ba5624a655af5c5d8b11c1137d552f3e0a60
+ Author: Casey Carter
+ Date: Sun Sep 18 14:55:55 2022 -0700
+
+ [headers] Order `` before `` in the header table
+
+ Fixes #5853.
+
+ commit 16f92154ce99a5fef26c53c464e8b14ad5b78d79
+ Author: A. Jiang
+ Date: Tue Sep 20 05:37:31 2022 +0800
+
+ [c.math.hypot3] Fix mis-transcribed parameter type (#5852)
+
+ The paper P1467R9 says that the third parameter of `hypot` should be
+ `_floating-point-type_`, but it was erroneously transcribed as `double`.
+
+ commit db26a63222f10cec871656958b3e296e529df67e
+ Author: Thomas Köppe
+ Date: Wed Sep 21 22:18:51 2022 +0100
+
+ [support, etc.] New subclause "Arithmetic types". (#5851)
+
+ The new subclause contains both "integer types" ()
+ and "extended floating-point types" ().
+
+ Previously, the newly added synopsis was somewhat
+ disconnected and out of context.
+
+ This change removes the stable labels [cstdint] and [cstdint.general].
+
+ commit d462173b5afdc8506d85e5395f2be19311895f2d
+ Author: Casey Carter
+ Date: Mon Sep 19 20:42:44 2022 -0700
+
+ [mdspan.extents.cons] Correct spelling of "dynamic-extents"
+
+ commit 14a10ef0948f4709cd1114c489b8e4b919ba7cbc
+ Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+ Date: Thu Sep 22 05:20:44 2022 +0800
+
+ [unord.general, container.adaptors.general] Fix list of exposition-only alias templates (#5840)
+
+ commit aab149233f76df37979d777ffd2b3151c52d48a9
+ Author: Jonathan Wakely
+ Date: Thu Sep 22 10:51:46 2022 +0100
+
+ [template.bitset] reorder synopsis and member descriptions
+
+ Group shifts together and use same order for synopsis and detailed
+ descriptions.
+
+ Also remove the unnecessary "for b[i];" comments explaining what
+ operator[] does, and add a comment introducing the group containing
+ count(), size() etc.
+
+ commit 63e4a76f780c925a13efeb06955252d7c37ed4ef
+ Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+ Date: Thu Sep 22 09:30:14 2022 +0800
+
+ [range.as.const.overview] Remove unnecessary ranges namespace qualification
+
+ commit 179436adbe60c277fa6512352ee27e26f192bf2b
+ Author: Alisdair Meredith
+ Date: Fri Sep 23 12:45:09 2022 -0400
+
+ [utility.arg.requirements] Present identifiers as itemization (#5856)
+
+ Lists providing the key for names used throughout a subclause are difficult
+ to follow when buried as a single sentence in a paragraph. This change updates
+ the key to tables 29-36 in [utility.arg.requirements] to a bulleted list
+ following the examples set elsewhere.
+
+ Each key is now consistently introduced with the word "denotes", following
+ the precedent set by similar bullet lists.
+
+ It is not at all coincidental that this also resolves pagination issues
+ at the end of the page, so that the floating tables to not float into the
+ middle of a sentence in the following section.
+
+ commit 24d54e30506a62ef41cf4bd0132fbdba45bb6dda
+ Author: Jonathan Wakely
+ Date: Tue Sep 27 11:56:32 2022 +0100
+
+ [futures.task.members] Add missing explicit to packaged_task ctor
+
+ commit 842424bd228b79876437a1a9393f20f00033476a
+ Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+ Date: Wed Sep 28 16:39:59 2022 +0800
+
+ [futures.task.members] Correct capitalization
+
+ commit d3ddc0906638bb30b5a3ce0f4033148e9a8ed1ff
+ Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+ Date: Thu Sep 29 15:49:06 2022 +0800
+
+ [container.rev.reqmts] Correct capitalization
+
+ commit a7f17181ef5b59ad728b421a83975209406fa037
+ Author: Daniel Krügler
+ Date: Mon Oct 3 17:59:20 2022 +0200
+
+ [sequence.reqmts] Use "lvalues of type T are swappable" (#5878)
+
+ commit dd6c7f4012489325bdd65a40cd121b3d25008b0e
+ Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+ Date: Tue Oct 4 04:41:26 2022 +0800
+
+ [associative.reqmts.general] Fix typo in namespace name (#5881)
+
+ commit 42c7b3fb3a3cb11bc1af418cfdd395ecf314aa43
+ Author: Thomas Köppe
+ Date: Tue Oct 4 13:08:17 2022 +0100
+
+ [intro.defs] Update hyperlink according to SC22 requirements
+
+ commit 05019b35890b79374fac180a9a9ff9e7cf8d7595
+ Author: Thomas Köppe
+ Date: Tue Oct 4 15:19:01 2022 +0100
+
+ Foreword placeholder
+
+ commit b0fab58d4f2b12defdaf7c3ddfb2ddcd1f30e1b5
+ Author: Jonathan Wakely
+ Date: Wed Oct 5 11:27:23 2022 +0100
+
+ [temp.local] Fix typo in "inject-class-name" (#5889)
+
+ commit f6c5d4512d4b32d63d66669555ab976b315d439c
+ Author: mordante
+ Date: Mon Oct 10 17:50:51 2022 +0200
+
+ [format.string.escaped] Fix example of invalid code unit (#5890)
+
+ Example 5 should only have one invalid code unit. The second code unit is a valid code point.
+
+ This issue was already in the paper P2286R8 "Formatting Ranges".
+
+ commit 5f26c516a659cdf3f0ea007cf6c90c690cccc3b6
+ Author: Eelis van der Weegen
+ Date: Tue Oct 11 04:36:08 2022 +0200
+
+ [bibliography] Remove stray closing parenthesis.
+
+ commit 6c51392a3d1c3c928ef1c20c19e8efe6efed7dc1
+ Author: Corentin Jabot
+ Date: Wed Oct 19 22:29:09 2022 +0200
+
+ [intro.defs] Move the definition of "multibyte character" to library
+
+ This address the US-2 NB comment as per the direction voted on
+ by SG-16.
+
+ No use of "multibyte character" remains before [multibyte.strings].
+
+ commit 33e56641d63c5993d288082cf264a733464ff75c
+ Author: Arthur O'Dwyer
+ Date: Tue Oct 25 17:48:03 2022 -0400
+
+ [stack.syn, queue.syn] Add xref comments to class synopses (#5913)
+
+ commit 90aa7729b9a926622581354284ecf294a56e410b
+ Author: Will Hawkins <8715530+hawkinsw@users.noreply.github.com>
+ Date: Tue Nov 1 04:37:52 2022 -0400
+
+ [range.dangling] Replace "tag type" with just "type" (#5922)
+
+ The extra word "tag" was not adding any value and was potentially,
+ confusing; e.g. the "dangling" type is not like, say, an iterator tag
+ that would be used for overload resolution.
+
+ commit fd998c52af2dc6b9c73098fdbd5a22444a358448
+ Author: Arthur O'Dwyer
+ Date: Tue Nov 1 10:45:53 2022 -0400
+
+ [flat.set] [flat.multiset] Use value_type, not key_type
+
+ For consistency with the other `set`, `unordered_set` containers.
+ `key_type` is a synonym for `value_type`, and there's no reason
+ the flat containers need to depart from existing practice here.
+
+ commit 48ecaaec300de4a8176c116408cac915142166ce
+ Author: Arthur O'Dwyer
+ Date: Mon Nov 7 14:02:40 2022 -0500
+
+ [flat.multiset.modifiers] Fix typo in "multiset" (#5927)
+
+ commit 45d9a5ba5aee1e3c4da8938e12376b36a7147d63
+ Author: Eric41293
+ Date: Mon Nov 7 11:11:58 2022 -0800
+
+ [climits.syn] Correct note about types of macros (#5926)
+
+ This note was added apparently as a response to LWG 416. However, there may have been a misunderstanding of the C standard, and in fact only the macros for `{signed,unsigned,} char` and `{signed,unsigned} int` have a different type.
+
+ commit f41cd00273e6ee7ff1a29446b21f230c28bf1a9f
+ Author: Jonathan Wakely
+ Date: Mon Nov 7 20:59:54 2022 +0000
+
+ [time.clock.system.nonmembers, time.zone.zonedtime.nonmembers] Add to STATICALLY-WIDEN (#5934)
+
+ commit ef7d0e234722d2ef8b4ec069b6f929dc083d8dc7
+ Author: Ed Catmur
+ Date: Tue Sep 20 18:12:45 2022 +0100
+
+ [meta, thread] Add or amend references to func.{require,invoke}
+
+ commit 0d5c9b9310b2f6c6c4259665e1e680936babdc3d
+ Author: Eric41293
+ Date: Mon Nov 7 15:54:55 2022 -0800
+
+ [meta.type.synop] Capitalize NTTP name (#5921)
+
+ commit 0959b5c200a6f2b543e2d656850917b8d788767c
+ Author: Hui <65944694+huixie90@users.noreply.github.com>
+ Date: Tue Nov 8 00:49:15 2022 +0000
+
+ [range.drop.while.overview] Use string_view rather than string literal (#5897)
+
+ The string literal would have been treated as a `const char*`, which is not a range.
+
+ commit 720c3ae24a68fda02a6372eda13ec3f9c6a1a39b
+ Author: Jonathan Wakely
+ Date: Tue Nov 8 02:01:34 2022 +0000
+
+ [time.format] Use basic_ostringstream instead of ostringstream (#5932)
+
+ commit 8739d316f2a55c633963b26b748681ff16498887
+ Author: Marc Mutz <94039187+marcmutz@users.noreply.github.com>
+ Date: Tue Nov 8 03:05:45 2022 +0100
+
+ [meta.const.eval] Add is_constant_evaluated to index of library names (#5898)
+
+ Previously, only its feature-test macro was listed there.
+
+ commit 4c442cf93f03a44ec1f6a93875043a3aca7c5b9b
+ Author: Johel Ernesto Guerrero Peña
+ Date: Mon Nov 7 23:38:36 2022 -0400
+
+ [class.union.general] Attach example to its note (#5882)
+
+ commit 65c494b9a4a5a4fab500733441c04e50a787d318
+ Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+ Date: Tue Nov 8 15:51:21 2022 +0800
+
+ [mdspan.extents.expo] Remove redundant "// exposition only" (#5907)
+
+ commit b766881dda1d0201d98710b11efda3491a84b4f2
+ Author: languagelawyer <38548419+languagelawyer@users.noreply.github.com>
+ Date: Tue Nov 8 13:15:07 2022 +0500
+
+ [dcl.init.list] Specify the type of the prvalue (#5919)
+
+ commit 6e035b52e28e95211a39ffb552851499432b2c6e
+ Author: Johel Ernesto Guerrero Peña
+ Date: Tue Nov 8 15:30:29 2022 -0400
+
+ [ratio.ratio] Use symbol "sgn" for the signum function (#5925)
+
+ commit 89269f8e548b993b239f2c0f5ecc071ee7f54c9a
+ Author: Blackteahamburger
+ Date: Wed Nov 9 04:12:59 2022 +0800
+
+ [dcl.link] Add missing restriction to language linkage application (#5892)
+
+ A language linkage specification should only apply to entities that do in fact have language linkage.
+
+ commit ea77b2fa83ddac0c52c1b505ff666328a2a8f558
+ Author: Jens Maurer
+ Date: Wed Nov 9 00:34:26 2022 +0100
+
+ [temp.deduct.general] Fix typo in comment in example
+
+ commit 0c196ec375993000547e8913abb4c4ce703144cb
+ Author: Jens Maurer
+ Date: Thu Nov 10 15:32:56 2022 +0100
+
+ [temp.deduct.conv] Remove misleading paragraph break
+
+ commit 0cd0c33f648d1304160e6dcb1856affd71b3ebbb
+ Author: Casey Carter
+ Date: Fri Nov 11 18:35:53 2022 -0800
+
+ [mdspan.extents.cons] "constexpr" should precede "explicit"
+
+ In library function declarations, the `constexpr` specifier always precedes the `explicit` specifier per our standing style guide.
+
+ commit 608c152dbae69d335d7238cdd5d178e048e2a1fd
+ Author: Casey Carter
+ Date: Mon Nov 14 10:48:18 2022 -0800
+
+ [vector.bool.pspc] Replace `constexpr static` with `static constexpr`
+
+ As preferred by our style guide.
+
+ commit d829eac310981e688a15b28622a2f048d23eed65
+ Author: Thomas Köppe
+ Date: Thu Nov 10 07:43:32 2022 +0000
+
+ [class.inhctor.init] Fix explanation of "error:" in example
+
+ The correct explanation is that classes `B1` and `D1` do not have
+ default constructors, not that they have deleted default constructors.
+
+ Fixes NB CA 062 (C++23 CD).
+
+ commit 6a1c5050c21ac26fcb2b5b187a0de867713568dc
+ Author: Thomas Köppe
+ Date: Tue Nov 8 23:35:00 2022 +0000
+
+ [diff.cpp20.library] Add missing new headers
+
+ Fixes NB FR 008 (C++23 CD).
+
+ commit b2fa70faa783827cd38b819409e94da2523333f2
+ Author: Thomas Köppe
+ Date: Wed Nov 9 18:50:56 2022 +0000
+
+ [views] Subclauses for contiguous and multidimensional access
+
+ This organises the material for and into separate
+ subclauses, rather than having all constituent parts being siblings in
+ the same subclause. Even though we now have some subclauses six levels
+ deep, this seems like an improvement. As a drive-by, this allows us to
+ move a subclause on a non-member span helper function up one level,
+ where it is more appropriate.
+
+ Fixes NB FR 027 (C++23 CD).
+
+ commit e0bab4b7f2d8afe5d3939aa49fe6de4fd5e638c6
+ Author: Thomas Köppe
+ Date: Thu Nov 10 02:16:11 2022 +0000
+
+ [concepts index] Describe exposition-only concepts
+
+ Fixes NB GB 136 (C++23 CD).
+
+ commit 9512e41e30cf24a8e93e8c8568ff1b5c14398cc6
+ Author: Thomas Köppe
+ Date: Fri Nov 11 19:31:11 2022 +0000
+
+ [general, library index] Describe exposition-only entities
+
+ Partially fixes NB GB 137 (C++23 CD).
+
+ commit 0783dde32073b02b369c7c3893f4f496a83e3658
+ Author: Thomas Köppe
+ Date: Fri Nov 11 19:33:33 2022 +0000
+
+ [func.wrap.move.ctor] Move private expos member to general index
+
+ The private, exposition-only data member is not useful in the library
+ index. However, there seems no reason to not show it in the general
+ index, so we move the index entry from the library index to the
+ general index.
+
+ Partially fixes NB GB 137 (C++23 CD).
+
+ commit 3e825f144f2aa8668c9a1a94066b43799e08a6e7
+ Author: Thomas Köppe
+ Date: Tue Nov 8 21:31:30 2022 +0000
+
+ [basic.scope.scope] Fix indentation in example
+
+ Fixes NB US 034 (C++23 CD).
+
+ commit 92de5996625efcb070f99681acd2e39efc206ee2
+ Author: Thomas Köppe
+ Date: Tue Nov 8 23:24:35 2022 +0000
+
+ [unord.req.general] Fix garbled end of sentence
+
+ This was an editorial mistake introduced by the transformation of the
+ requirement tables into regular paragraphs.
+
+ Fixes NB US 100 (C++23 CD).
+
+ commit 24e046896029a11f2cb78fd6db21482fb0d4be66
+ Author: Thomas Köppe
+ Date: Tue Nov 8 21:02:31 2022 +0000
+
+ [coro.generator.promise] Use "equivalent to `throw`, ..."
+
+ Our style guide says that "equivalent to " is the
+ appropriate style for an expression of type `void`, which is the case
+ for `throw`. This avoids the awkward situation of having "equivalent
+ to: `throws;`" appear in the middle of a paragraph without proper
+ terminal punctuation.
+
+ Fixes NB US 119 (C++23 CD).
+
+ commit 3f47d2565f26a9144e8076641ee55bf7be79f896
+ Author: Thomas Köppe
+ Date: Tue Nov 8 21:27:56 2022 +0000
+
+ [coro.generator.promise] Remove unused name "x"
+
+ Fixes NB US 120 (C++23 CD).
+
+ commit fb0df97e7d7c2c75bbdf7164c33b0796024ff6d3
+ Author: Jonathan Wakely
+ Date: Thu Nov 17 08:44:05 2022 +0000
+
+ [atomics] Replace integral and floating-point placeholders (#5939)
+
+ Fixes NB GB 129 (C++23 CD).
+
+ commit 0bb57d5ebffa7170fbc80724f55a6ac2a82f2e83
+ Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+ Date: Fri Nov 25 14:56:24 2022 +0800
+
+ [format.arg] Add std:: for forward
+
+ commit c88fb46327d87d78d571b7e1076e1916eaf7e310
+ Author: Dawn Perchik
+ Date: Tue Nov 15 07:46:41 2022 -0800
+
+ [expr.unary.op] Say "the ~ operator" consistently, remove "unary"
+
+ We are currently using the term "unary complement operator" to refer
+ to the "~" operator without ever giving it that name. This change
+ removes the use of that undefined term.
+
+ commit bef02b89464fe6f4be3926d62defc92986ae4532
+ Author: Thomas Köppe
+ Date: Tue Nov 22 16:28:42 2022 +0000
+
+ [expr.unary.op] Notes naming unary ops as {ones',two's} complement
+
+ The terms "one's complement" and "two's complement" are well-known,
+ and it is useful to associate them with these operators.
+
+ commit 020a312b2aa513a992e488d82db55fd0cd4fa025
+ Author: Thomas Köppe
+ Date: Wed Nov 16 17:48:12 2022 +0000
+
+ [fs.rec.dir.itr.nonmembers] "for" is a keyword in "range-based for"
+
+ commit cee095e75a97fb88a7053e360b3bc06d36a6b687
+ Author: Alisdair Meredith
+ Date: Fri Dec 16 06:51:26 2022 +0700
+
+ [depr.conversions.string] remove redundent respecification (#6004)
+
+ There are several typedef names defined precisely in the deprecated code conversion
+ facets classes that are redundantly respecified in text. Nowhere else in the library
+ does this; any specified typedef names are _see below_ definitions, not repeats of
+ the class definition. Needless redundancy is always a risk of divergence, however
+ small, so remove the respecification in text form.
+
+ commit 1bb52db31be002f04ea5977f9900ba4174c7155e
+ Author: Anoop Rana <93918384+ranaanoop@users.noreply.github.com>
+ Date: Fri Dec 16 05:23:57 2022 +0530
+
+ [concepts.object] Change "built-in" to "fundamental" types (#6012)
+
+ commit ce1cc3b011099b6228b18dad937911c6ea67d309
+ Author: Johel Ernesto Guerrero Peña
+ Date: Sun Dec 11 17:03:41 2022 -0400
+
+ [expr.const] Remove redundant "ill-formed" in "error" comment
+
+ commit 5d43f0137776fa112d0ffd6ba0e34df34a4cb820
+ Author: Jonathan Wakely
+ Date: Tue Dec 13 12:52:00 2022 +0000
+
+ [time.zone.leap.members] update note about leap seconds
+
+ commit fd20d4ea9f3ea8653b17169aad61eec843b71718
+ Author: Jonathan Wakely
+ Date: Wed Nov 23 14:45:43 2022 +0000
+
+ [time.zone.zonedtime.overview] Rename parameters to match later definitions
+
+ commit 137728f0830824c6058648a846376eec80e5cab3
+ Author: Michael Florian Hava
+ Date: Fri Dec 16 02:10:55 2022 +0100
+
+ [coro.generator.promise] Fix template parameters (#6009)
+
+ Some of the template parameters of `yield_value` were inconsistent,
+ and the synopsis contained an outright typo. This change uses `R2`
+ consistently since the parameter is a reference.
+
+ commit 5d6099c3df78922ee5b5f1d1c42a5c762d246df0
+ Author: Thomas Köppe
+ Date: Thu Dec 15 23:31:26 2022 +0000
+
+ [formatter.requirements] Remove one level of list nesting
+
+ commit 9e41a1c27de2f676badacbe0c1aac783063b7cd6
+ Author: Thomas Köppe
+ Date: Wed Nov 16 19:43:58 2022 +0000
+
+ [time.clock.req] Make list item end with comma, not full stop.
+
+ Also reformat the itemization source to be more edit-friendly.
+
+ commit 5ef31f3fc1531d9e6e923cb57bf6e5ecec59ed4e
+ Author: languagelawyer
+ Date: Thu Jun 25 10:54:17 2020 +0300
+
+ [expr.unary.op] Fix usage of "result"
+
+ commit 8c60752c7eb28e1ff1cc9e088d7836957356f559
+ Author: Jonathan Wakely
+ Date: Tue Apr 26 10:18:11 2022 +0100
+
+ [optional.ctor], [expected.object.ctor] Add converts-from-any-cvref
+
+ commit 405b46f50ce6c7458e94db7b4528fc267e2b67c3
+ Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+ Date: Sat Dec 17 00:14:51 2022 +0800
+
+ [mdspan.mdspan.overview] Add default template arguments for mdspan (#6018)
+
+ We usually restate the default template arguments in the class synopsis,
+ so that the information is in one place and one does not need to also refer
+ to the header synopsis.
+
+ commit ae88bb581d32f1939987c0a834fe3f6011a9d003
+ Author: frederick-vs-ja
+ Date: Fri Dec 16 21:25:31 2022 +0800
+
+ [range.repeat] Change `W`/`WArgs` to `T`/`TArgs`
+
+ commit 0a1f1e147c75ce9220de3488103ca880b6b8e49f
+ Author: Thomas Köppe
+ Date: Fri Dec 16 17:19:08 2022 +0000
+
+ [concept.copyconstructible] Avoid "possibly \tcode{const}"
+
+ A small rewrite avoids the phrase "possibly \tcode{const}",
+ which we would like to remove entirely in favour of just
+ "possibly const".
+
+ commit f058decdf9c7dea0461f723df72f5093f5e92b11
+ Author: Thomas Köppe
+ Date: Fri Dec 16 17:31:47 2022 +0000
+
+ Replace "possibly \tcode{const}" with "possibly const"
+
+ The "const" here is not syntax, but just normal text.
+ This is similar to "inline" and "public", which have
+ previously been cleaned up similarly.
+
+ commit 9ac55553459e15c84db6d8072c93787d41ef7ccf
+ Author: Jens Maurer
+ Date: Fri Jun 4 00:29:30 2021 +0200
+
+ [lib] Drop 'inline' from 'inline constexpr' variable templates.
+
+ Since CWG2387, constexpr variable templates have external linkage.
diff --git a/papers/wd-index.md b/papers/wd-index.md
index 5d6a4f75a1..abd18efdb3 100644
--- a/papers/wd-index.md
+++ b/papers/wd-index.md
@@ -41,4 +41,5 @@
* [N4892](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/n4892.pdf) 2021-06 C++ Working Draft
* [N4901](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/n4901.pdf) 2021-10 C++ Working Draft
* [N4910](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4910.pdf) 2022-03 C++ Working Draft
- * [N4910](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4917.pdf) 2022-07 C++ Working Draft
+ * [N4917](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4917.pdf) 2022-07 C++ Working Draft
+ * [N4928](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4928.pdf) 2022-11 C++ Working Draft
diff --git a/source/algorithms.tex b/source/algorithms.tex
index 1a4d627698..61a5eb3713 100644
--- a/source/algorithms.tex
+++ b/source/algorithms.tex
@@ -151,14 +151,14 @@
whenever an algorithm expects a function object\iref{function.objects} that,
when applied to the result of dereferencing the corresponding iterator,
returns a value testable as \tcode{true}.
-In other words,
-if an algorithm takes \tcode{Predicate pred} as its argument and
+If an algorithm takes \tcode{Predicate pred} as its argument and
\tcode{first} as its iterator argument with value type \tcode{T},
-it should work correctly in the construct
-\tcode{pred(*first)} contextually converted to \tcode{bool}\iref{conv}.
+the expression \tcode{pred(*first)} shall be well-formed and
+the type \tcode{decltype(pred(*first))} shall model
+\exposconcept{boolean-testable}\iref{concept.booleantestable}.
The function object \tcode{pred} shall not apply any non-constant function
-through the dereferenced iterator.
-Given a glvalue \tcode{u} of type (possibly \keyword{const}) \tcode{T}
+through its argument.
+Given a glvalue \tcode{u} of type (possibly const) \tcode{T}
that designates the same object as \tcode{*first},
\tcode{pred(u)} shall be a valid expression
that is equal to \tcode{pred(*first)}.
@@ -170,22 +170,24 @@
to dereferencing an iterator and type \tcode{T}
when \tcode{T} is part of the signature,
returns a value testable as \tcode{true}.
-In other words,
-if an algorithm takes \tcode{BinaryPredicate binary_pred} as its argument and
+If an algorithm takes \tcode{BinaryPredicate binary_pred} as its argument and
\tcode{first1} and \tcode{first2} as its iterator arguments
with respective value types \tcode{T1} and \tcode{T2},
-it should work correctly in the construct
-\tcode{binary_pred(*first1, *first2)} contextually converted to \tcode{bool}\iref{conv}.
+the expression \tcode{binary_pred(*first1, *first2)} shall be well-formed and
+the type \tcode{decltype(binary_pred(*first1, *first2))} shall model
+\exposconcept{boolean-testable}.
Unless otherwise specified,
\tcode{BinaryPredicate} always takes the first iterator's \tcode{value_type}
as its first argument, that is, in those cases when \tcode{T value}
-is part of the signature, it should work correctly in the construct
-\tcode{binary_pred(*first1, value)} contextually converted to \tcode{bool}\iref{conv}.
+is part of the signature,
+the expression \tcode{binary_pred(*first1, value)} shall be well-formed and
+the type \tcode{decltype(binary_pred(*first1, value))} shall model
+\exposconcept{boolean-testable}.
\tcode{binary_pred} shall not apply any non-constant function
-through the dereferenced iterators.
-Given a glvalue \tcode{u} of type (possibly \keyword{const}) \tcode{T1}
+through any of its arguments.
+Given a glvalue \tcode{u} of type (possibly const) \tcode{T1}
that designates the same object as \tcode{*first1}, and
-a glvalue \tcode{v} of type (possibly \keyword{const}) \tcode{T2}
+a glvalue \tcode{v} of type (possibly const) \tcode{T2}
that designates the same object as \tcode{*first2},
\tcode{binary_pred(u, *first2)},
\tcode{binary_pred(*first1, v)}, and
@@ -1108,7 +1110,7 @@
class Proj1 = identity, class Proj2 = identity,
@\libconcept{indirect_equivalence_relation}@, Proj1>,
projected, Proj2>>
- Pred = ranges::equal_to>
+ Pred = ranges::equal_to>
constexpr bool is_permutation(R1&& r1, R2&& r2, Pred pred = {},
Proj1 proj1 = {}, Proj2 proj2 = {});
}
@@ -1267,15 +1269,15 @@
constexpr auto fold_left_first(R&& r, F f);
template<@\libconcept{bidirectional_iterator}@ I, @\libconcept{sentinel_for}@ S, class T,
- @\exposconcept{indirectly-binary-right-foldable}@ F>
+ @\exposconcept{indirectly-binary-right-foldable}@ F>
constexpr auto fold_right(I first, S last, T init, F f);
template<@\libconcept{bidirectional_range}@ R, class T,
- @\exposconcept{indirectly-binary-right-foldable}@> F>
+ @\exposconcept{indirectly-binary-right-foldable}@> F>
constexpr auto fold_right(R&& r, T init, F f);
template<@\libconcept{bidirectional_iterator}@ I, @\libconcept{sentinel_for}@ S,
- @\exposconcept{indirectly-binary-right-foldable}@, I> F>
+ @\exposconcept{indirectly-binary-right-foldable}@, I> F>
requires @\libconcept{constructible_from}@, iter_reference_t>
constexpr auto fold_right_last(I first, S last, F f);
@@ -1290,7 +1292,7 @@
using fold_left_first_with_iter_result = in_value_result;
template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class T,
- @\exposconcept{indirectly-binary-left-foldable}@ F>
+ @\exposconcept{indirectly-binary-left-foldable}@ F>
constexpr @\seebelow@ fold_left_with_iter(I first, S last, T init, F f);
template<@\libconcept{input_range}@ R, class T, @\exposconcept{indirectly-binary-left-foldable}@> F>
@@ -6293,7 +6295,7 @@
\effects
Equivalent to:
\begin{codeblock}
-return ranges::rotate_copy(ranges::begin(r), middle, ranges::end(r), result);
+return ranges::rotate_copy(ranges::begin(r), middle, ranges::end(r), std::move(result));
\end{codeblock}
\end{itemdescr}
@@ -6569,7 +6571,7 @@
named \tcode{BinaryPredicate}~\iref{algorithms.requirements}.
The return value of the function call operation
applied to an object of type \tcode{Compare},
-when contextually converted to \tcode{bool}\iref{conv},
+when converted to \tcode{bool},
yields \tcode{true}
if the first argument of the call is less than the second, and
\tcode{false} otherwise.
@@ -11127,7 +11129,7 @@
\effects
Equivalent to:
\begin{codeblock}
-auto t = uninitialized_copy(counted_iterator(ifirst, n),
+auto t = uninitialized_copy(counted_iterator(std::move(ifirst), n),
default_sentinel, ofirst, olast);
return {std::move(t.in).base(), t.out};
\end{codeblock}
@@ -11237,7 +11239,7 @@
\effects
Equivalent to:
\begin{codeblock}
-auto t = uninitialized_move(counted_iterator(ifirst, n),
+auto t = uninitialized_move(counted_iterator(std::move(ifirst), n),
default_sentinel, ofirst, olast);
return {std::move(t.in).base(), t.out};
\end{codeblock}
@@ -11448,7 +11450,7 @@
\effects
Equivalent to:
\begin{codeblock}
-return destroy(counted_iterator(first, n), default_sentinel).base();
+return destroy(counted_iterator(std::move(first), n), default_sentinel).base();
\end{codeblock}
\end{itemdescr}
diff --git a/source/back.tex b/source/back.tex
index dda5569dc8..40954fd628 100644
--- a/source/back.tex
+++ b/source/back.tex
@@ -21,12 +21,12 @@ \chapter{Bibliography}
\item
%%% Format for the following entry is based on that specified at
%%% http://www.iec.ch/standardsdev/resources/draftingpublications/directives/principles/referencing.htm
- The Unicode Consortium. Unicode Standard Annex, UAX \#29,
+ The Unicode Consortium. Unicode Standard Annex, \UAX{29},
\doccite{Unicode Text Segmentation} [online].
Edited by Mark Davis. Revision 35; issued for Unicode 12.0.0. 2019-02-15 [viewed 2020-02-23].
Available from: \url{http://www.unicode.org/reports/tr29/tr29-35.html}
\item
- The Unicode Consortium. Unicode Standard Annex, UAX \#31,
+ The Unicode Consortium. Unicode Standard Annex, \UAX{31},
\doccite{Unicode Identifier and Pattern Syntax} [online].
Edited by Mark Davis. Revision 33; issued for Unicode 13.0.0.
2020-02-13 [viewed 2021-06-08].
@@ -51,7 +51,7 @@ \chapter{Bibliography}
\item
P.J. Plauger,
\doccite{The Draft Standard \Cpp{} Library}.
- Prentice-Hall, ISBN 0-13-117003-1, copyright \copyright 1995 P.J. Plauger)
+ Prentice-Hall, ISBN 0-13-117003-1, copyright \copyright 1995 P.J. Plauger
\end{itemize}
The arithmetic specification described in ISO/IEC 10967-1:2012 is
@@ -87,6 +87,7 @@ \chapter{Bibliography}
\clearpage
\renewcommand{\leftmark}{\indexname}
+\renewcommand{\preindexhook}{Constructions whose name appears in \exposid{monospaced italics} are for exposition only.\\}
{
\raggedright
\printindex[generalindex]
@@ -110,7 +111,7 @@ \chapter{Bibliography}
}
\clearpage
-\renewcommand{\preindexhook}{}
+\renewcommand{\preindexhook}{Constructions whose name appears in \exposid{italics} are for exposition only.\\}
{
\raggedright
\printindex[libraryindex]
@@ -119,7 +120,8 @@ \chapter{Bibliography}
\clearpage
\renewcommand{\preindexhook}{The bold page number for each entry is the page
where the concept is defined.
-Other page numbers refer to pages where the concept is mentioned in the general text.\\}
+Other page numbers refer to pages where the concept is mentioned in the general text.
+Concepts whose name appears in \exposid{italics} are for exposition only.\\}
{
\raggedright
\printindex[conceptindex]
diff --git a/source/basic.tex b/source/basic.tex
index f32e82975f..bd155ed606 100644
--- a/source/basic.tex
+++ b/source/basic.tex
@@ -48,7 +48,7 @@
Every name is introduced by a \defn{declaration}, which is a
\begin{itemize}
\item
-\grammarterm{declaration},
+\grammarterm{name-declaration},
\grammarterm{block-declaration}, or
\grammarterm{member-declaration}\iref{dcl.pre,class.mem},
\item
@@ -440,7 +440,7 @@
\label{term.odr.use}%
A variable is named by an expression
if the expression is an \grammarterm{id-expression} that denotes it.
-A variable \tcode{x} whose name appears as a
+A variable \tcode{x} that is named by a
potentially-evaluated expression $E$
is \defnx{odr-used}{odr-use} by $E$ unless
\begin{itemize}
@@ -675,6 +675,11 @@
\item In each such definition, corresponding entities shall have the
same language linkage.
+\item In each such definition,
+const objects with static or thread storage duration
+shall be constant-initialized if
+the object is constant-initialized in any such definition.
+
\item In each such definition, the overloaded operators referred
to, the implicit calls to conversion functions, constructors, operator
new functions and operator delete functions, shall refer to the same
@@ -882,6 +887,7 @@
\item
their object parameters have the same type.
\end{itemize}
+\indextext{template!function!corresponding object parameter}%
Two non-static member function templates have
\defnadjx{corresponding}{object parameters}{object parameter} if:
\begin{itemize}
@@ -894,6 +900,14 @@
\item
the types of their object parameters are equivalent.
\end{itemize}
+\indextext{template!function!corresponding signature}%
+Two function templates have
+\defnadjx{corresponding}{signatures}{signature} if
+their \grammarterm{template-parameter-list}{s}
+have the same length,
+their corresponding \grammarterm{template-parameter}{s} are equivalent,
+they have equivalent non-object-parameter-type-lists and return types (if any), and,
+if both are non-static members, they have corresponding object parameters.
\pnum
Two declarations \defn{correspond}
@@ -925,13 +939,9 @@
if both are non-static members,
they have corresponding object parameters, or
\item
-both declare function templates with equivalent
-non-object-parameter-type-lists,
-return types (if any),
-\grammarterm{template-head}s, and
-trailing \grammarterm{requires-clause}s (if any), and,
-if both are non-static members,
-they have corresponding object parameters.
+both declare function templates with corresponding signatures and equivalent
+\grammarterm{template-head}s and
+trailing \grammarterm{requires-clause}s (if any).
\end{itemize}
\end{itemize}
\begin{note}
@@ -939,7 +949,7 @@
\begin{example}
\begin{codeblock}
struct A {
-friend void f(); // \#1
+ friend void f(); // \#1
};
struct B {
friend void f() {} // corresponds to, and defines, \#1
@@ -1743,10 +1753,6 @@
if it precedes $P$ and inhabits either $S$ or
the scope of a namespace nominated by a \grammarterm{using-directive}
that is active in $S$ at $P$.
-\begin{note}
-A \grammarterm{using-directive} is exported if and only if
-it appears in a header unit.
-\end{note}
\pnum
An \term{unqualified search} in a scope $S$ from a program point $P$
@@ -3358,7 +3364,8 @@
except that if the object is a union member or subobject thereof,
its lifetime only begins if that union member is the
initialized member in the union\iref{dcl.init.aggr,class.base.init},
-or as described in \ref{class.union} and \ref{class.copy.ctor},
+or as described in
+\ref{class.union}, \ref{class.copy.ctor}, and \ref{class.copy.assign},
and except as described in \ref{allocator.members}.
The lifetime of an object \placeholder{o} of type \tcode{T} ends when:
\begin{itemize}
@@ -3425,8 +3432,7 @@
program has undefined behavior if:
\begin{itemize}
\item
- the object will be or was of a class type with a non-trivial destructor
- and the pointer is used as the operand of a \grammarterm{delete-expression},
+ the pointer is used as the operand of a \grammarterm{delete-expression},
\item
the pointer is used to access a non-static data member or call a
non-static member function of the object, or
@@ -3515,7 +3521,7 @@
\item $o_1$ and $o_2$ are of the same type
(ignoring the top-level cv-qualifiers), and
-\item $o_1$ is not a complete const object, and
+\item $o_1$ is not a const, complete object, and
\item neither $o_1$ nor $o_2$
is a potentially-overlapping subobject\iref{intro.object}, and
@@ -3586,7 +3592,7 @@
\end{example}
\pnum
-Creating a new object within the storage that a const complete
+Creating a new object within the storage that a const, complete
object with static, thread, or automatic storage duration occupies,
or within the storage that such a const object used to occupy before
its lifetime ended, results in undefined behavior.
@@ -4156,8 +4162,9 @@
\pnum
\begin{note}
The runtime pointer alignment function\iref{ptr.align}
-can be used to obtain an aligned pointer within a buffer; the aligned-storage templates
-in the library\iref{meta.trans.other} can be used to obtain aligned storage.
+can be used to obtain an aligned pointer within a buffer;
+an \grammarterm{alignment-specifier}\iref{dcl.align}
+can be used to align storage explicitly.
\end{note}
\pnum
@@ -4310,7 +4317,7 @@
\pnum
\indextext{initializer!temporary and declarator}%
\indextext{temporary!order of destruction of}%
-There are three contexts in which temporaries are destroyed at a different
+There are four contexts in which temporaries are destroyed at a different
point than the end of the full-expression.
The first context is when a default constructor is called to initialize
an element of an array with no corresponding initializer\iref{dcl.init}.
@@ -4431,14 +4438,24 @@
\end{itemize}
\pnum
-The destruction of a temporary whose lifetime is not extended by being
-bound to a reference is sequenced before the destruction of every
+The fourth context is when a temporary object other than a function parameter object
+is created in the \grammarterm{for-range-initializer} of a range-based \keyword{for} statement.
+If such a temporary object would otherwise be destroyed
+at the end of the \grammarterm{for-range-initializer} full-expression,
+the object persists for the lifetime of the reference
+initialized by the \grammarterm{for-range-initializer}.
+
+\pnum
+The destruction of a temporary whose lifetime is not extended
+beyond the full-expression in which it was created
+is sequenced before the destruction of every
temporary which is constructed earlier in the same full-expression.
-If the lifetime of two or more temporaries to which references are bound ends
-at the same point,
+If the lifetime of two or more temporaries
+with lifetimes extending beyond the full-expressions in which they were created
+ends at the same point,
these temporaries are destroyed at that point in the reverse order of the
completion of their construction.
-In addition, the destruction of temporaries bound to references shall
+In addition, the destruction of such temporaries shall
take into account the ordering of destruction of objects with static, thread, or
automatic storage duration\iref{basic.stc.static,basic.stc.thread,basic.stc.auto};
that is, if
@@ -4655,9 +4672,14 @@
can be an array of unknown bound and therefore be incomplete at one
point in a translation unit and complete later on; the array types at
those two points (``array of unknown bound of \tcode{T}'' and ``array of
-\tcode{N} \tcode{T}'') are different types. The type of a pointer to array of
-unknown bound, or of a type defined by a \keyword{typedef} declaration to
-be an array of unknown bound, cannot be completed.
+\tcode{N} \tcode{T}'') are different types.
+\begin{note}
+The type of a pointer or reference to array of unknown bound
+permanently points to or refers to an incomplete type.
+An array of unknown bound named by a \keyword{typedef} declaration
+permanently refers to an incomplete type.
+In either case, the array type cannot be completed.
+\end{note}
\begin{example}
\indextext{type!example of incomplete}%
\begin{codeblock}
@@ -4740,15 +4762,20 @@
has all of the following properties:
\begin{itemize}
\item it has a constexpr destructor\iref{dcl.constexpr},
-\item it is either a closure type\iref{expr.prim.lambda.closure},
-an aggregate type\iref{dcl.init.aggr}, or
-has at least one constexpr constructor or constructor template
+\item all of its non-static non-variant data members and base classes are of non-volatile literal types, and
+\item it
+\begin{itemize}
+\item is a closure type\iref{expr.prim.lambda.closure},
+\item is an aggregate union type that has either
+no variant members or
+at least one variant member of non-volatile literal type,
+\item is a non-union aggregate type for which
+each of its anonymous union members
+satisfies the above requirements for an aggregate union type, or
+\item has at least one constexpr constructor or constructor template
(possibly inherited\iref{namespace.udecl} from a base class)
-that is not a copy or move constructor,
-\item if it is a union, at least one of its non-static data members is
-of non-volatile literal type, and
-\item if it is not a union, all of its non-static data members and base classes are
-of non-volatile literal types.
+that is not a copy or move constructor.
+\end{itemize}
\end{itemize}
\end{itemize}
\begin{note}
@@ -5569,6 +5596,10 @@
\item
The constituent expression of an expression is that expression.
\item
+The constituent expression of a conversion is
+the corresponding implicit function call, if any, or
+the converted expression otherwise.
+\item
The constituent expressions of a \grammarterm{braced-init-list} or
of a (possibly parenthesized) \grammarterm{expression-list}
are the constituent expressions of the elements of the respective list.
@@ -5616,6 +5647,15 @@
Expressions appearing in the \grammarterm{compound-statement} of a \grammarterm{lambda-expression}
are not subexpressions of the \grammarterm{lambda-expression}.
\end{note}
+The \defnadjx{potentially-evaluated}{subexpressions}{subexpression} of
+an expression, conversion, or \grammarterm{initializer} $E$ are
+\begin{itemize}
+\item
+the constituent expressions of $E$ and
+\item
+the subexpressions thereof that
+are not subexpressions of a nested unevaluated operand\iref{term.unevaluated.operand}.
+\end{itemize}
\pnum
A \defn{full-expression} is
diff --git a/source/classes.tex b/source/classes.tex
index 18b57e45fa..e13097d465 100644
--- a/source/classes.tex
+++ b/source/classes.tex
@@ -305,7 +305,7 @@
A class \tcode{S} is an \defnadj{implicit-lifetime}{class} if
\begin{itemize}
\item
-it is an aggregate or
+it is an aggregate whose destructor is not user-provided or
\item
it has at least one trivial eligible constructor and
a trivial, non-deleted destructor.
@@ -605,10 +605,9 @@
\end{note}
\pnum
-A class is considered a completely-defined object
-type\iref{term.incomplete.type} (or complete type) at the closing \tcode{\}} of
-the \grammarterm{class-specifier}.
-The class is regarded as complete within its complete-class contexts;
+A class is regarded as complete
+where its definition is reachable and
+within its complete-class contexts;
otherwise it is regarded as incomplete within its own class
\grammarterm{member-specification}.
@@ -660,6 +659,11 @@
shall not directly or indirectly cause the implicit definition of a
defaulted default constructor for the enclosing class or the
exception specification of that constructor.
+An immediate invocation\iref{expr.const} that
+is a potentially-evaluated subexpression\iref{intro.execution}
+of a default member initializer
+is neither evaluated nor checked for whether it
+is a constant expression at the point where the subexpression appears.
\pnum
A member shall not be declared with the \keyword{extern}
@@ -785,13 +789,21 @@
The \defn{common initial sequence} of two standard-layout struct\iref{class.prop}
types is the longest sequence of non-static data
members and bit-fields in declaration order, starting with the first
-such entity in each of the structs, such that corresponding entities
+such entity in each of the structs, such that
+\begin{itemize}
+\item
+corresponding entities
have layout-compatible types\iref{basic.types},
+\item
+corresponding entities have the same alignment requirements\iref{basic.align},
+\item
either both entities are declared with
the \tcode{no_unique_address} attribute\iref{dcl.attr.nouniqueaddr}
-or neither is,
-and either both entities are bit-fields with the same width
+or neither is, and
+\item
+either both entities are bit-fields with the same width
or neither is a bit-field.
+\end{itemize}
\begin{example}
\begin{codeblock}
struct A { int a; char b; };
@@ -1028,8 +1040,7 @@
The implementation will implicitly declare these member functions for some class
types when the program does not explicitly declare them.
The implementation will implicitly define them
-if they are odr-used\iref{term.odr.use} or
-needed for constant evaluation\iref{expr.const}.
+as needed\iref{dcl.fct.def.default}.
\end{note}
An implicitly-declared special member function is declared at the closing
\tcode{\}} of the \grammarterm{class-specifier}.
@@ -1291,15 +1302,7 @@
\defnx{non-trivial}{constructor!default!non-trivial}.
\pnum
-A default constructor
-that is defaulted and not defined as deleted
-is
-\defnx{implicitly defined}{constructor!implicitly defined}
-when it is odr-used\iref{term.odr.use}
-to initialize an object of its class type\iref{intro.object},
-when it is needed for constant evaluation\iref{expr.const}, or
-when it is explicitly defaulted after its first declaration.
-The implicitly-defined default constructor performs the set of
+An implicitly-defined\iref{dcl.fct.def.default} default constructor performs the set of
initializations of the class that would be performed by a user-written default
constructor for that class with no
\grammarterm{ctor-initializer}\iref{class.base.init} and an empty
@@ -1590,20 +1593,11 @@
\defnx{non-trivial}{constructor!copy!nontrivial}.
\pnum
-\indextext{constructor!copy!implicitly defined}%
-\indextext{constructor!move!implicitly defined}%
-A copy/move constructor
-that is defaulted and not defined as deleted
-is
-\term{implicitly defined}
-when it is odr-used\iref{term.odr.use},
-when it is needed for constant evaluation\iref{expr.const}, or
-when it is explicitly defaulted after its first declaration.
\begin{note}
The copy/move constructor is implicitly defined even if the implementation elided
its odr-use\iref{term.odr.use,class.temporary}.
\end{note}
-If the implicitly-defined constructor would satisfy the requirements of a
+If an implicitly-defined\iref{dcl.fct.def.default} constructor would satisfy the requirements of a
constexpr function\iref{dcl.constexpr}, the implicitly-defined
constructor is \keyword{constexpr}.
@@ -1893,18 +1887,7 @@
\defnx{non-trivial}{assignment operator!copy!non-trivial}.
\pnum
-\indextext{assignment operator!copy!implicitly defined}%
-\indextext{assignment operator!move!implicitly defined}%
-A copy/move assignment operator for a class \tcode{X}
-that is defaulted and not defined as deleted
-is
-\term{implicitly defined}
-when it is odr-used\iref{term.odr.use}
-(e.g., when it is selected by overload resolution
-to assign to an object of its class type),
-when it is needed for constant evaluation\iref{expr.const}, or
-when it is explicitly defaulted after its first declaration.
-The implicitly-defined copy/move assignment operator is \keyword{constexpr}.
+An implicitly-defined\iref{dcl.fct.def.default} copy/move assignment operator is \keyword{constexpr}.
\pnum
Before the defaulted copy/move assignment operator for a class is
@@ -2114,14 +2097,6 @@
A defaulted destructor is a constexpr destructor
if it satisfies the requirements for a constexpr function\iref{dcl.constexpr}.
-\pnum
-A destructor
-that is defaulted and not defined as deleted
-is
-\defnx{implicitly defined}{destructor!implicitly defined}
-when it is odr-used\iref{term.odr.use}
-or when it is explicitly defaulted after its first declaration.
-
\pnum
Before a
defaulted destructor for a class is implicitly defined, all the non-user-provided
@@ -3150,12 +3125,8 @@
or destructor\iref{class.dtor}, the corresponding member function
of the union must be user-provided or it will
be implicitly deleted\iref{dcl.fct.def.delete} for the union.
-\end{note}
-
-\pnum
\begin{example}
Consider the following union:
-
\begin{codeblock}
union U {
int i;
@@ -3163,7 +3134,6 @@
std::string s;
};
\end{codeblock}
-
Since \tcode{std::string}\iref{string.classes} declares non-trivial versions of all of the special
member functions, \tcode{U} will have an implicitly deleted default constructor,
copy/move constructor,
@@ -3171,6 +3141,7 @@
To use \tcode{U}, some or all of these member functions
must be user-provided.
\end{example}
+\end{note}
\pnum
When the left operand of an assignment operator
@@ -5879,7 +5850,7 @@
D1 d(2, 3, 4); // OK, \tcode{B1} is initialized by calling \tcode{B1(2, 3, 4)},
// then \tcode{d.x} is default-initialized (no initialization is performed),
// then \tcode{d.y} is initialized by calling \tcode{get()}
- D1 e; // error: \tcode{D1} has a deleted default constructor
+ D1 e; // error: \tcode{D1} has no default constructor
}
struct D2 : B2 {
@@ -5887,7 +5858,7 @@
B1 b;
};
-D2 f(1.0); // error: \tcode{B1} has a deleted default constructor
+D2 f(1.0); // error: \tcode{B1} has no default constructor
struct W { W(int); };
struct X : virtual W { using W::W; X() = delete; };
@@ -6427,12 +6398,7 @@
where the implicit object parameter (if any) is considered to be
the first parameter.
\end{itemize}
-A comparison operator function for class \tcode{C} that
-is defaulted on its first declaration and
-is not defined as deleted is
-\defnx{implicitly defined}{operator!comparison!implicitly defined}
-when it is odr-used or needed for constant evaluation.
-Name lookups in the defaulted definition
+Name lookups in the implicit definition\iref{dcl.fct.def.default}
of a comparison operator function
are performed from a context equivalent to
its \grammarterm{function-body}.
diff --git a/source/compatibility.tex b/source/compatibility.tex
index 21cd9c51eb..fbf61627fb 100644
--- a/source/compatibility.tex
+++ b/source/compatibility.tex
@@ -16,7 +16,7 @@
\diffref{lex.name}
\change
Previously valid identifiers containing characters
-not present in UAX \#44 properties XID_Start or XID_Continue, or
+not present in \UAX{44} properties XID_Start or XID_Continue, or
not in Normalization Form C, are now rejected.
\rationale
Prevent confusing characters in identifiers.
@@ -69,6 +69,29 @@
// now equivalent to \tcode{arr.operator[](1, 2)} or ill-formed
\end{codeblock}
+\rSec2[diff.cpp20.stmt]{\ref{stmt.stmt}: statements}
+
+\diffref{stmt.ranged}
+\change
+The lifetime of temporary objects in the \grammarterm{for-range-initializer}
+is extended until the end of the loop\iref{class.temporary}.
+\rationale
+Improve usability of the range-based \keyword{for} statement.
+\effect
+Destructors of some temporary objects are invoked later.
+For example:
+\begin{codeblock}
+void f() {
+ std::vector v = { 42, 17, 13 };
+ std::mutex m;
+
+ for (int x :
+ static_cast(std::lock_guard(m)), v) { // lock released in \CppXX
+ std::lock_guard guard(m); // OK in \CppXX, now deadlocks
+ }
+}
+\end{codeblock}
+
\rSec2[diff.cpp20.dcl]{\ref{dcl.dcl}: declarations}
\diffref{dcl.init.string}
@@ -128,9 +151,13 @@
\effect
The following \Cpp{} headers are new:
\libheaderref{expected},
-\libheaderref{stdatomic.h},
-\libheaderref{spanstream}, and
-\libheaderref{stacktrace}.
+\libheaderrefx{flat_map}{flat.map.syn},
+\libheaderrefx{flat_set}{flat.set.syn},
+\libheaderref{generator},
+\libheaderref{print},
+\libheaderref{spanstream},
+\libheaderref{stacktrace}, and
+\libheaderref{stdatomic.h}.
Valid \CppXX{} code that \tcode{\#include}{s} headers with these names may be
invalid in this revision of \Cpp{}.
@@ -653,6 +680,31 @@
}
\end{codeblock}
+\diffref{over.match.oper}
+\change
+Overload resolution may change for equality operators\iref{expr.eq}.
+\rationale
+Support calling \tcode{operator==} with reversed order of arguments.
+\effect
+Valid \CppXVII{} code that uses equality operators with conversion functions
+may be ill-formed or have different semantics in this revision of \Cpp{}.
+For example:
+\begin{codeblock}
+struct A {
+ operator int() const { return 10; }
+};
+
+bool operator==(A, int); // \#1
+// \#2 is built-in candidate: \tcode{bool operator==(int, int);}
+bool b = 10 == A(); // calls \#1 with reversed order of arguments; previously selected \#2
+
+struct B {
+ bool operator==(const B&); // member function with no cv-qualifier
+};
+B b1;
+bool eq = (b1 == b1); // ambiguous; previously well-formed
+\end{codeblock}
+
\rSec2[diff.cpp17.temp]{\ref{temp}: templates}
\diffref{temp.names}
diff --git a/source/concepts.tex b/source/concepts.tex
index 801cb8ec57..0508cb542b 100644
--- a/source/concepts.tex
+++ b/source/concepts.tex
@@ -620,6 +620,11 @@
exchange the values denoted by
\tcode{E1} and \tcode{E2},
the program is ill-formed, no diagnostic required.
+ \begin{note}
+ This precludes calling unconstrained program-defined overloads of
+ \tcode{swap}. When the deleted overload is viable, program-defined overloads
+ need to be more specialized\iref{temp.func.order} to be selected.
+ \end{note}
\item
Otherwise, if \tcode{E1} and \tcode{E2}
@@ -770,7 +775,7 @@
\begin{itemdecl}
template
- inline constexpr bool @\exposid{is-default-initializable}@ = @\seebelow@; // \expos
+ constexpr bool @\exposid{is-default-initializable}@ = @\seebelow@; // \expos
template
concept @\deflibconcept{default_initializable}@ = @\libconcept{constructible_from}@ &&
@@ -828,7 +833,7 @@
\begin{itemdescr}
\pnum
If \tcode{T} is an object type, then let \tcode{v} be an lvalue of type
-(possibly \keyword{const}) \tcode{T} or an rvalue of type \tcode{const T}.
+\tcode{T} or \tcode{\keyword{const} T} or an rvalue of type \tcode{\keyword{const} T}.
\tcode{T} models \libconcept{copy_constructible} only if
\begin{itemize}
@@ -1200,14 +1205,14 @@
\pnum
\begin{note}
The \libconcept{semiregular} concept is modeled by types that behave similarly
-to built-in types like \tcode{int}, except that they need not
+to fundamental types like \tcode{int}, except that they need not
be comparable with \tcode{==}.
\end{note}
\pnum
\begin{note}
The \libconcept{regular} concept is modeled by types that behave similarly to
-built-in types like \tcode{int} and that are comparable with
+fundamental types like \tcode{int} and that are comparable with
\tcode{==}.
\end{note}
\end{itemdescr}
diff --git a/source/config.tex b/source/config.tex
index f5acf7b1e1..0f2a0d13ee 100644
--- a/source/config.tex
+++ b/source/config.tex
@@ -1,8 +1,8 @@
%!TEX root = std.tex
%%--------------------------------------------------
%% Version numbers
-\newcommand{\docno}{N4917}
-\newcommand{\prevdocno}{N4910}
+\newcommand{\docno}{N4928}
+\newcommand{\prevdocno}{N4917}
\newcommand{\cppver}{202002L}
%% Release date
diff --git a/source/containers.tex b/source/containers.tex
index 7d02506cbe..7a15185cc8 100644
--- a/source/containers.tex
+++ b/source/containers.tex
@@ -79,13 +79,18 @@
\item
\tcode{X} denotes a container class containing objects of type \tcode{T},
\item
-\tcode{a} and \tcode{b} denote values of type \tcode{X},
+\tcode{a} denotes a value of type \tcode{X},
+\item
+\tcode{b} and \tcode{c} denote values of type (possibly const) \tcode{X},
\item
\tcode{i} and \tcode{j} denote values of type (possibly const) \tcode{X::iterator},
\item
\tcode{u} denotes an identifier,
\item
-\tcode{r} denotes a non-const value of type \tcode{X}, and
+\tcode{v} denotes an lvalue of type (possibly const) \tcode{X} or
+an rvalue of type \tcode{const X},
+\item
+\tcode{s} and \tcode{t} denote non-const lvalues of type \tcode{X}, and
\item
\tcode{rv} denotes a non-const rvalue of type \tcode{X}.
\end{itemize}
@@ -94,7 +99,7 @@
% Local command to index names as members of all containers.
\newcommand{\indexcont}[1]{%
-\indexlibrarymisc{#1}{containers}%
+\indexlibrarymisc{\idxcode{#1}}{containers}%
\indexlibrarymemberx{array}{#1}%
\indexlibrarymemberx{deque}{#1}%
\indexlibrarymemberx{forward_list}{#1}%
@@ -219,8 +224,8 @@
\end{itemdescr}
\begin{itemdecl}
-X u(a);
-X u = a;
+X u(v);
+X u = v;
\end{itemdecl}
\begin{itemdescr}
@@ -230,7 +235,7 @@
\pnum
\ensures
-\tcode{u == a}
+\tcode{u == v}.
\pnum
\complexity
@@ -252,8 +257,27 @@
Linear for \tcode{array} and constant for all other standard containers.
\end{itemdescr}
+\indexcont{operator=}%
\begin{itemdecl}
-a = rv
+t = v;
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\result
+\tcode{X\&}.
+
+\pnum
+\ensures
+\tcode{t == v}.
+
+\pnum
+\complexity
+Linear.
+\end{itemdescr}
+
+\begin{itemdecl}
+t = rv
\end{itemdecl}
\begin{itemdescr}
@@ -263,12 +287,12 @@
\pnum
\effects
-All existing elements of \tcode{a} are either move assigned to or destroyed.
+All existing elements of \tcode{t} are either move assigned to or destroyed.
\pnum
\ensures
-If \tcode{a} and \tcode{rv} do not refer to the same object,
-\tcode{a} is equal to the value that \tcode{rv} had before this assignment.
+If \tcode{t} and \tcode{rv} do not refer to the same object,
+\tcode{t} is equal to the value that \tcode{rv} had before this assignment.
\pnum
\complexity
@@ -282,7 +306,7 @@
\begin{itemdescr}
\pnum
\result
-\keyword{void}
+\keyword{void}.
\pnum
\effects
@@ -295,14 +319,14 @@
\indexcont{begin}%
\begin{itemdecl}
-a.begin()
+b.begin()
\end{itemdecl}
\begin{itemdescr}
\pnum
\result
\tcode{iterator};
-\tcode{const_iterator} for constant \tcode{a}.
+\tcode{const_iterator} for constant \tcode{b}.
\pnum
\returns
@@ -315,14 +339,14 @@
\indexcont{end}%
\begin{itemdecl}
-a.end()
+b.end()
\end{itemdecl}
\begin{itemdescr}
\pnum
\result
\tcode{iterator};
-\tcode{const_iterator} for constant \tcode{a}.
+\tcode{const_iterator} for constant \tcode{b}.
\pnum
\returns
@@ -335,7 +359,7 @@
\indexcont{cbegin}%
\begin{itemdecl}
-a.cbegin()
+b.cbegin()
\end{itemdecl}
\begin{itemdescr}
@@ -345,7 +369,7 @@
\pnum
\returns
-\tcode{const_cast(a).begin()}
+\tcode{const_cast(b).begin()}
\pnum
\complexity
@@ -354,7 +378,7 @@
\indexcont{cend}%
\begin{itemdecl}
-a.cend()
+b.cend()
\end{itemdecl}
\begin{itemdescr}
@@ -364,7 +388,7 @@
\pnum
\returns
-\tcode{const_cast(a).end()}
+\tcode{const_cast(b).end()}
\pnum
\complexity
@@ -391,7 +415,7 @@
\indexcont{operator==}%
\begin{itemdecl}
-a == b
+c == b
\end{itemdecl}
\begin{itemdescr}
@@ -401,11 +425,11 @@
\pnum
\result
-Convertible to \tcode{bool}.
+\tcode{bool}.
\pnum
\returns
-\tcode{equal(a.begin(), a.end(), b.begin(), b.end())}
+\tcode{equal(c.begin(), c.end(), b.begin(), b.end())}
\begin{note}
The algorithm \tcode{equal} is defined in \ref{alg.equal}.
@@ -413,7 +437,7 @@
\pnum
\complexity
-Constant if \tcode{a.size() != b.size()}, linear otherwise.
+Constant if \tcode{c.size() != b.size()}, linear otherwise.
\pnum
\remarks
@@ -422,28 +446,28 @@
\indexcont{operator"!=}%
\begin{itemdecl}
-a != b
+c != b
\end{itemdecl}
\begin{itemdescr}
\pnum
\effects
-Equivalent to \tcode{!(a == b)}.
+Equivalent to \tcode{!(c == b)}.
\end{itemdescr}
\indexcont{swap}%
\begin{itemdecl}
-a.swap(b)
+t.swap(s)
\end{itemdecl}
\begin{itemdescr}
\pnum
\result
-\keyword{void}
+\keyword{void}.
\pnum
\effects
-Exchanges the contents of \tcode{a} and \tcode{b}.
+Exchanges the contents of \tcode{t} and \tcode{s}.
\pnum
\complexity
@@ -451,37 +475,18 @@
\end{itemdescr}
\begin{itemdecl}
-swap(a, b)
+swap(t, s)
\end{itemdecl}
\begin{itemdescr}
\pnum
\effects
-Equivalent to \tcode{a.swap(b)}.
-\end{itemdescr}
-
-\indexcont{operator=}%
-\begin{itemdecl}
-r = a
-\end{itemdecl}
-
-\begin{itemdescr}
-\pnum
-\result
-\tcode{X\&}.
-
-\pnum
-\ensures
-\tcode{r == a}.
-
-\pnum
-\complexity
-Linear.
+Equivalent to \tcode{t.swap(s)}.
\end{itemdescr}
\indexcont{size}%
\begin{itemdecl}
-a.size()
+c.size()
\end{itemdecl}
\begin{itemdescr}
@@ -491,7 +496,7 @@
\pnum
\returns
-\tcode{distance(a.begin(), a.end())},
+\tcode{distance(c.begin(), c.end())},
i.e. the number of elements in the container.
\pnum
@@ -506,7 +511,7 @@
\indexcont{max_size}%
\begin{itemdecl}
-a.max_size()
+c.max_size()
\end{itemdecl}
\begin{itemdescr}
@@ -525,17 +530,17 @@
\indexcont{empty}%
\begin{itemdecl}
-a.empty()
+c.empty()
\end{itemdecl}
\begin{itemdescr}
\pnum
\result
-Convertible to \tcode{bool}.
+\tcode{bool}.
\pnum
\returns
-\tcode{a.begin() == a.end()}
+\tcode{c.begin() == c.end()}
\pnum
\complexity
@@ -543,7 +548,7 @@
\pnum
\remarks
-If the container is empty, then \tcode{a.empty()} is true.
+If the container is empty, then \tcode{c.empty()} is \tcode{true}.
\end{itemdescr}
\pnum
@@ -607,13 +612,13 @@
container type other than \tcode{array}, shall exchange the values of \tcode{a} and
\tcode{b} without invoking any move, copy, or swap operations on the individual
container elements.
-Lvalues of any \tcode{Compare}, \tcode{Pred}, or \tcode{Hash} types
-belonging to \tcode{a} and \tcode{b} shall be swappable
+Any \tcode{Compare}, \tcode{Pred}, or \tcode{Hash} types
+belonging to \tcode{a} and \tcode{b} shall meet the \oldconcept{Swappable} requirements
and shall be exchanged by calling \tcode{swap}
as described in~\ref{swappable.requirements}. If
\tcode{allocator_traits::propagate_on_container_swap::value} is
\tcode{true}, then
-lvalues of type \tcode{allocator_type} shall be swappable and
+\tcode{allocator_type} shall meet the \oldconcept{Swap\-pable} requirements and
the allocators of \tcode{a} and \tcode{b} shall also be exchanged
by calling \tcode{swap} as described in~\ref{swappable.requirements}.
Otherwise, the allocators shall not be swapped, and the behavior is
@@ -627,7 +632,7 @@
% Local command to index names as members of all containers.
\renewcommand{\indexcont}[1]{%
-\indexlibrarymisc{#1}{reversible containers}%
+\indexlibrarymisc{\idxcode{#1}}{reversible containers}%
\indexlibrarymemberx{array}{#1}%
\indexlibrarymemberx{deque}{#1}%
\indexlibrarymemberx{list}{#1}%
@@ -761,18 +766,18 @@
\begin{itemize}
\item
-if an exception is thrown by an
+If an exception is thrown by an
\tcode{insert()} or \tcode{emplace()}
function while inserting a single element, that
function has no effects.
\item
-if an exception is thrown by a
+If an exception is thrown by a
\tcode{push_back()},
\tcode{push_front()},
\tcode{emplace_back()}, or \tcode{emplace_front()}
function, that function has no effects.
\item
-no
+No
\tcode{erase()},
\tcode{clear()},
\tcode{pop_back()}
@@ -780,14 +785,14 @@
\tcode{pop_front()}
function throws an exception.
\item
-no copy constructor or assignment operator of a returned iterator
+No copy constructor or assignment operator of a returned iterator
throws an exception.
\item
-no
+No
\tcode{swap()}
function throws an exception.
\item
-no
+No
\tcode{swap()}
function invalidates any references,
pointers, or iterators referring to the elements
@@ -866,7 +871,7 @@
and an \tcode{allocator_type} identical to \tcode{allocator_traits::rebind_alloc}
and given an lvalue \tcode{m} of type \tcode{A},
a pointer \tcode{p} of type \tcode{T*},
-an expression \tcode{v} of type (possibly \keyword{const}) \tcode{T},
+an expression \tcode{v} of type \tcode{T} or \tcode{const T},
and an rvalue \tcode{rv} of type \tcode{T},
the following terms are defined. If \tcode{X}
is not allocator-aware or is a specialization of \tcode{basic_string},
@@ -976,7 +981,7 @@
% Local command to index names as members of all containers.
\renewcommand{\indexcont}[1]{%
-\indexlibrarymisc{#1}{allocator-aware containers}%
+\indexlibrarymisc{\idxcode{#1}}{allocator-aware containers}%
\indexlibrarymemberx{deque}{#1}%
\indexlibrarymemberx{forward_list}{#1}%
\indexlibrarymemberx{list}{#1}%
@@ -1312,7 +1317,7 @@
% Local command to index names as members of all containers.
\renewcommand{\indexcont}[1]{%
-\indexlibrarymisc{#1}{sequence containers}%
+\indexlibrarymisc{\idxcode{#1}}{sequence containers}%
\indexlibrarymemberx{deque}{#1}%
\indexlibrarymemberx{forward_list}{#1}%
\indexlibrarymemberx{list}{#1}%
@@ -1545,9 +1550,10 @@
For \tcode{vector} and \tcode{deque},
\tcode{T} is also
\oldconcept{MoveInsertable} into \tcode{X},
+and \tcode{T} meets the
\oldconcept{MoveConstructible},
\oldconcept{MoveAssignable}, and
-swappable\iref{swappable.requirements}.
+\oldconcept{Swappable}\iref{swappable.requirements} requirements.
Neither \tcode{i} nor \tcode{j} are iterators into \tcode{a}.
\pnum
@@ -1579,9 +1585,10 @@
For \tcode{vector} and \tcode{deque},
\tcode{T} is also
\oldconcept{MoveInsertable} into \tcode{X},
+and \tcode{T} meets the
\oldconcept{MoveConstructible},
-\oldconcept{MoveAssignable}, and
-swappable\iref{swappable.requirements}.
+\oldconcept{Move\-Assignable}, and
+\oldconcept{Swappable}\iref{swappable.requirements} requirements.
\tcode{rg} and \tcode{a} do not overlap.
\pnum
@@ -1821,7 +1828,8 @@
\pnum
The following operations are provided for
some types of sequence containers but not others.
-An implementation shall implement them so as to take amortized constant time.
+Operations other than \tcode{prepend_range} and \tcode{append_range}
+are implemented so as to take amortized constant time.
\begin{itemdecl}
a.front()
@@ -2615,7 +2623,7 @@
\tcode{a2} denotes a value of a type with nodes compatible with type
\tcode{X} (\tref{container.node.compat}),
\item
-\tcode{b} denotes a possibly \keyword{const} value of type \tcode{X},
+\tcode{b} denotes a value or type \tcode{X} or \tcode{const X},
\item
\tcode{u} denotes the name of a variable being declared,
\item
@@ -2625,9 +2633,9 @@
\tcode{a_eq} denotes a value of type \tcode{X}
when \tcode{X} supports multiple keys,
\item
-\tcode{a_tran} denotes a possibly \keyword{const} value of type \tcode{X}
+\tcode{a_tran} denotes a value of type \tcode{X} or \tcode{const X}
when the \grammarterm{qualified-id}
-\tcode{X::key_compare::is_transpa\-rent} is valid
+\tcode{X::key_compare::is_transparent} is valid
and denotes a type\iref{temp.deduct},
\item
\tcode{i} and \tcode{j}
@@ -2654,7 +2662,7 @@
\item
\tcode{k} denotes a value of type \tcode{X::key_type}, and
\item
-\tcode{c} denotes a possibly \keyword{const} value of type \tcode{X::key_compare};
+\tcode{c} denotes a value of type \tcode{X::key_compare} or \tcode{const X::key_compare};
\item
\tcode{kl} is a value such that \tcode{a} is partitioned\iref{alg.sorting}
with respect to \tcode{c(x, kl)},
@@ -2906,7 +2914,7 @@
\expects
\tcode{value_type} is
\oldconcept{EmplaceConstructible} into \tcode{X}
-from \tcode{*range::begin(rg)}.
+from \tcode{*ranges::begin(rg)}.
\pnum
\effects
@@ -4114,7 +4122,7 @@
\tcode{a2} denotes a value of a type with nodes compatible
with type \tcode{X} (\tref{container.node.compat}),
\item
-\tcode{b} denotes a possibly const value of type \tcode{X},
+\tcode{b} denotes a value of type \tcode{X} or \tcode{const X},
\item
\tcode{a_uniq} denotes a value of type \tcode{X}
when \tcode{X} supports unique keys,
@@ -4122,7 +4130,7 @@
\tcode{a_eq} denotes a value of type \tcode{X}
when \tcode{X} supports equivalent keys,
\item
-\tcode{a_tran} denotes a possibly const value of type \tcode{X}
+\tcode{a_tran} denotes a value of type \tcode{X} or \tcode{const X}
when the \grammarterm{qualified-id}s
\tcode{X::key_equal::is_transparent} and
\tcode{X::hasher::is_transparent}
@@ -4151,9 +4159,9 @@
\item
\tcode{k} denotes a value of type \tcode{key_type},
\item
-\tcode{hf} denotes a possibly const value of type \tcode{hasher},
+\tcode{hf} denotes a value of type \tcode{hasher} or \tcode{const hasher},
\item
-\tcode{eq} denotes a possibly const value of type \tcode{key_equal},
+\tcode{eq} denotes a value of type \tcode{key_equal} or \tcode{const key_equal},
\item
\tcode{ke} is a value such that
\begin{itemize}
@@ -4177,7 +4185,7 @@
\item
\tcode{z} denotes a value of type \tcode{float}, and
\item
-\tcode{nh} denotes a non-const rvalue of type \tcode{X::node_type}.
+\tcode{nh} denotes an rvalue of type \tcode{X::node_type}.
\end{itemize}
\pnum
@@ -4796,7 +4804,7 @@
\pnum
\effects
Inserts a \tcode{value_type} object \tcode{t}
-constructed with \tcode{std::forward(args)...} and
+constructed with \tcode{std::forward(args)...}.
\pnum
\returns
@@ -6110,7 +6118,7 @@
class vector;
template
- inline constexpr bool @\exposid{is-vector-bool-reference}@ = @\seebelow@; // \expos
+ constexpr bool @\exposid{is-vector-bool-reference}@ = @\seebelow@; // \expos
// hash support
template struct hash;
@@ -7267,12 +7275,33 @@
\indexlibrarymember{insert_after}{forward_list}%
\begin{itemdecl}
iterator insert_after(const_iterator position, const T& x);
+\end{itemdecl}
+
+\begin{itemdescr}
+\pnum
+\expects
+\tcode{T} is \oldconcept{CopyInsertable} into \tcode{forward_list}.
+\tcode{position} is \tcode{before_begin()} or is a dereferenceable
+iterator in the range \range{begin()}{end()}.
+
+\pnum
+\effects
+Inserts a copy of \tcode{x} after \tcode{position}.
+
+\pnum
+\returns
+An iterator pointing to the copy of \tcode{x}.
+\end{itemdescr}
+
+\indexlibrarymember{insert_after}{forward_list}%
+\begin{itemdecl}
iterator insert_after(const_iterator position, T&& x);
\end{itemdecl}
\begin{itemdescr}
\pnum
\expects
+\tcode{T} is \oldconcept{MoveInsertable} into \tcode{forward_list}.
\tcode{position} is \tcode{before_begin()} or is a dereferenceable
iterator in the range \range{begin()}{end()}.
@@ -7293,6 +7322,7 @@
\begin{itemdescr}
\pnum
\expects
+\tcode{T} is \oldconcept{CopyInsertable} into \tcode{forward_list}.
\tcode{position} is \tcode{before_begin()} or is a dereferenceable
iterator in the range \range{begin()}{end()}.
@@ -7302,7 +7332,8 @@
\pnum
\returns
-An iterator pointing to the last inserted copy of \tcode{x} or \tcode{position} if \tcode{n == 0}.
+An iterator pointing to the last inserted copy of \tcode{x}, or
+\tcode{position} if \tcode{n == 0} is \tcode{true}.
\end{itemdescr}
\indexlibrarymember{insert_after}{forward_list}%
@@ -7314,6 +7345,8 @@
\begin{itemdescr}
\pnum
\expects
+\tcode{T} is \oldconcept{EmplaceConstructible} into \tcode{forward_list}
+from \tcode{*first}.
\tcode{position} is \tcode{before_begin()} or is a dereferenceable
iterator in the range \range{begin()}{end()}.
Neither \tcode{first} nor \tcode{last} are iterators in \tcode{*this}.
@@ -7324,7 +7357,8 @@
\pnum
\returns
-An iterator pointing to the last inserted element or \tcode{position} if \tcode{first == last}.
+An iterator pointing to the last inserted element, or
+\tcode{position} if \tcode{first == last} is \tcode{true}.
\end{itemdescr}
\indexlibrarymember{insert_range_after}{forward_list}%
@@ -7336,7 +7370,9 @@
\begin{itemdescr}
\pnum
\expects
-\tcode{position} is \tcode{before_begin()} or
+\tcode{T} is \oldconcept{EmplaceConstructible} into \tcode{forward_list}
+from \tcode{*ranges::begin(rg)}.
+\tcode{posi\-tion} is \tcode{before_begin()} or
is a dereferenceable iterator in the range \range{begin()}{end()}.
\tcode{rg} and \tcode{*this} do not overlap.
@@ -7358,11 +7394,7 @@
\begin{itemdescr}
\pnum
\effects
-\tcode{insert_after(position, il.begin(), il.end())}.
-
-\pnum
-\returns
-An iterator pointing to the last inserted element or \tcode{position} if \tcode{il} is empty.
+Equivalent to: \tcode{return insert_after(position, il.begin(), il.end());}
\end{itemdescr}
@@ -7375,13 +7407,15 @@
\begin{itemdescr}
\pnum
\expects
+\tcode{T} is \oldconcept{EmplaceConstructible} into \tcode{forward_list}
+from \tcode{std::forward(\linebreak args)...}.
\tcode{position} is \tcode{before_begin()} or is a dereferenceable
iterator in the range \range{begin()}{end()}.
\pnum
\effects
-Inserts an object of type \tcode{value_type} constructed with
-\tcode{value_type(std::forward(\brk{}args)...)} after \tcode{position}.
+Inserts an object of type \tcode{value_type} direct-non-list-initialized with
+\tcode{std::forward(\linebreak args)...} after \tcode{position}.
\pnum
\returns
@@ -9146,9 +9180,10 @@
using const_reverse_iterator = std::reverse_iterator;
// bit reference
- class reference {
+ class @\libmember{reference}{vector}@ {
friend class vector;
constexpr reference() noexcept;
+
public:
constexpr reference(const reference&) = default;
constexpr ~reference();
@@ -9160,8 +9195,8 @@
};
// construct/copy/destroy
- constexpr vector() : vector(Allocator()) { }
- constexpr explicit vector(const Allocator&);
+ constexpr vector() noexcept(noexcept(Allocator())) : vector(Allocator()) { }
+ constexpr explicit vector(const Allocator&) noexcept;
constexpr explicit vector(size_type n, const Allocator& = Allocator());
constexpr vector(size_type n, const bool& value, const Allocator& = Allocator());
template
@@ -9169,13 +9204,15 @@
template<@\exposconcept{container-compatible-range}@ R>
constexpr vector(from_range_t, R&& rg, const Allocator& = Allocator());
constexpr vector(const vector& x);
- constexpr vector(vector&& x);
+ constexpr vector(vector&& x) noexcept;
constexpr vector(const vector&, const type_identity_t&);
constexpr vector(vector&&, const type_identity_t&);
constexpr vector(initializer_list, const Allocator& = Allocator());
constexpr ~vector();
constexpr vector& operator=(const vector& x);
- constexpr vector& operator=(vector&& x);
+ constexpr vector& operator=(vector&& x)
+ noexcept(allocator_traits::propagate_on_container_move_assignment::value ||
+ allocator_traits::is_always_equal::value);
constexpr vector& operator=(initializer_list);
template
constexpr void assign(InputIterator first, InputIterator last);
@@ -9237,8 +9274,10 @@
constexpr iterator erase(const_iterator position);
constexpr iterator erase(const_iterator first, const_iterator last);
- constexpr void swap(vector&);
- constexpr static void swap(reference x, reference y) noexcept;
+ constexpr void swap(vector&)
+ noexcept(allocator_traits::propagate_on_container_swap::value ||
+ allocator_traits::is_always_equal::value);
+ static constexpr void swap(reference x, reference y) noexcept;
constexpr void flip() noexcept; // flips all bits
constexpr void clear() noexcept;
};
@@ -9279,7 +9318,7 @@
\indexlibrarymember{swap}{vector}%
\begin{itemdecl}
-constexpr static void swap(reference x, reference y) noexcept;
+static constexpr void swap(reference x, reference y) noexcept;
\end{itemdecl}
\begin{itemdescr}
@@ -9304,10 +9343,10 @@
The specialization is enabled\iref{unord.hash}.
\end{itemdescr}
-\indexlibraryglobal{\exposid{is-vector-bool-reference}}%
+\indexlibrary{is-vector-bool-reference@\exposid{is-vector-bool-reference}}%
\begin{itemdecl}
template
- inline constexpr bool @\exposid{is-vector-bool-reference}@ = @\seebelow@;
+ constexpr bool @\exposid{is-vector-bool-reference}@ = @\seebelow@;
\end{itemdecl}
\begin{itemdescr}
@@ -9604,6 +9643,7 @@
protected:
Compare comp;
value_compare(Compare c) : comp(c) {}
+
public:
bool operator()(const value_type& x, const value_type& y) const {
return comp(x.first, y.first);
@@ -10186,6 +10226,7 @@
protected:
Compare comp;
value_compare(Compare c) : comp(c) { }
+
public:
bool operator()(const value_type& x, const value_type& y) const {
return comp(x.first, y.first);
@@ -11105,8 +11146,10 @@
\pnum
The exposition-only alias templates
-\exposid{iter\--value\--type}, \exposid{iter\--key\--type},
-\exposid{iter\--mapped\--type}, and \exposid{iter\--to\--alloc\--type}
+\exposid{iter-value-type}, \exposid{iter-key-type},
+\exposid{iter-mapped-type}, \exposid{iter-to\--alloc-type},
+\exposid{range-key-type}, \exposid{range-mapped-type},
+and \exposid{range-to-alloc-type}
defined in \ref{associative.general} may appear in deduction guides for unordered containers.
\rSec2[unord.map.syn]{Header \tcode{} synopsis}
@@ -13141,22 +13184,11 @@
\pnum
The exposition-only alias template \exposid{iter-value-type}
defined in \ref{sequences.general} and
-the exposition-only alias templates \exposid{iter-key-type} and \exposid{iter-mapped-type}
+the exposition-only alias templates \exposid{iter-key-type}, \exposid{iter-mapped-type},
+\exposid{range-key-type}, and \exposid{range-mapped-type}
defined in \ref{associative.general}
may appear in deduction guides for container adaptors.
-\pnum
-The following exposition-only alias templates may appear in deduction guides
-for container adaptors:
-\begin{codeblock}
-template
- using @\exposid{cont-key-type}@ = // \expos
- remove_const_t;
-template
- using @\exposid{cont-mapped-type}@ = // \expos
- typename Container::value_type::second_type;
-\end{codeblock}
-
\rSec2[queue.syn]{Header \tcode{} synopsis}
\indexheader{queue}
@@ -13165,6 +13197,7 @@
#include // see \ref{initializer.list.syn}
namespace std {
+ // \ref{queue}, class template \tcode{queue}
template> class queue;
template
@@ -13188,6 +13221,7 @@
template
struct uses_allocator, Alloc>;
+ // \ref{priority.queue}, class template \tcode{priority_queue}
template,
class Compare = less>
class priority_queue;
@@ -13208,6 +13242,7 @@
#include // see \ref{initializer.list.syn}
namespace std {
+ // \ref{stack}, class template \tcode{stack}
template> class stack;
template
@@ -13285,6 +13320,7 @@
\indexheader{flat_set}%
\begin{codeblock}
+#include // see \ref{compare.syn}
#include // see \ref{initializer.list.syn}
namespace std {
@@ -14616,10 +14652,12 @@
\end{note}
\pnum
-Any sequence container\iref{sequence.reqmts} \tcode{C}
-supporting \oldconcept{RandomAccessIterator} can be used
-to instantiate \tcode{flat_map},
-as long as invocations of
+Any type \tcode{C}
+that meets the sequence container requirements\iref{sequence.reqmts}
+can be used to instantiate \tcode{flat_map},
+as long as
+\tcode{C::iterator} meets the \oldconcept{RandomAccessIterator} requirements and
+invocations of
member functions \tcode{C::size} and \tcode{C::max_size} do not exit via an exception.
In particular, \tcode{vector}\iref{vector} and \tcode{deque}\iref{deque}
can be used.
@@ -14674,6 +14712,7 @@
private:
key_compare comp; // \expos
value_compare(key_compare c) : comp(c) { } // \expos
+
public:
bool operator()(const_reference x, const_reference y) const {
return comp(x.first, y.first);
@@ -15758,10 +15797,12 @@
\end{note}
\pnum
-Any sequence container\iref{sequence.reqmts} \tcode{C}
-supporting \oldconcept{RandomAccessIterator} can be used to
-instantiate \tcode{flat_multimap},
-as long as invocations of
+Any type \tcode{C}
+that meets the sequence container requirements\iref{sequence.reqmts}
+can be used to instantiate \tcode{flat_multimap},
+as long as
+\tcode{C::iterator} meets the \oldconcept{RandomAccessIterator} requirements and
+invocations of
member functions \tcode{C::size} and \tcode{C::max_size} do not exit via an exception.
In particular,
\tcode{vector}\iref{vector} and \tcode{deque}\iref{deque} can be used.
@@ -15814,6 +15855,7 @@
private:
key_compare comp; // \expos
value_compare(key_compare c) : comp(c) { } // \expos
+
public:
bool operator()(const_reference x, const_reference y) const {
return comp(x.first, y.first);
@@ -16396,23 +16438,23 @@
template
flat_set(sorted_unique_t, InputIterator first, InputIterator last, const Allocator& a);
- flat_set(initializer_list il, const key_compare& comp = key_compare())
+ flat_set(initializer_list il, const key_compare& comp = key_compare())
: flat_set(il.begin(), il.end(), comp) { }
template
- flat_set(initializer_list il, const key_compare& comp, const Allocator& a);
+ flat_set(initializer_list il, const key_compare& comp, const Allocator& a);
template
- flat_set(initializer_list il, const Allocator& a);
+ flat_set(initializer_list il, const Allocator& a);
- flat_set(sorted_unique_t s, initializer_list il,
+ flat_set(sorted_unique_t s, initializer_list il,
const key_compare& comp = key_compare())
: flat_set(s, il.begin(), il.end(), comp) { }
template
- flat_set(sorted_unique_t, initializer_list il,
+ flat_set(sorted_unique_t, initializer_list il,
const key_compare& comp, const Allocator& a);
template
- flat_set(sorted_unique_t, initializer_list il, const Allocator& a);
+ flat_set(sorted_unique_t, initializer_list il, const Allocator& a);
- flat_set& operator=(initializer_list);
+ flat_set& operator=(initializer_list);
// iterators
iterator begin() noexcept;
@@ -16458,9 +16500,9 @@
template<@\exposconcept{container-compatible-range}@ R>
void insert_range(R&& rg);
- void insert(initializer_list il)
+ void insert(initializer_list il)
{ insert(il.begin(), il.end()); }
- void insert(sorted_unique_t s, initializer_list il)
+ void insert(sorted_unique_t s, initializer_list il)
{ insert(s, il.begin(), il.end()); }
container_type extract() &&;
@@ -16637,14 +16679,14 @@
template
flat_set(sorted_unique_t, InputIterator first, InputIterator last, const Allocator& a);
template
- flat_set(initializer_list il, const key_compare& comp, const Allocator& a);
+ flat_set(initializer_list il, const key_compare& comp, const Allocator& a);
template
- flat_set(initializer_list il, const Allocator& a);
+ flat_set(initializer_list il, const Allocator& a);
template
- flat_set(sorted_unique_t, initializer_list il,
+ flat_set(sorted_unique_t, initializer_list il,
const key_compare& comp, const Allocator& a);
template
- flat_set(sorted_unique_t, initializer_list il, const Allocator& a);
+ flat_set(sorted_unique_t, initializer_list il, const Allocator& a);
\end{itemdecl}
\begin{itemdescr}
@@ -16783,7 +16825,7 @@
\effects
Equivalent to:
\begin{codeblock}
-ranges::swap(compare, y.compare);
+ranges::swap(@\exposid{compare}@, y.@\exposid{compare}@);
ranges::swap(@\exposid{c}@, y.@\exposid{c}@);
\end{codeblock}
\end{itemdescr}
@@ -16998,23 +17040,24 @@
flat_multiset(sorted_equivalent_t, InputIterator first, InputIterator last,
const Allocator& a);
- flat_multiset(initializer_list il, const key_compare& comp = key_compare())
+ flat_multiset(initializer_list il, const key_compare& comp = key_compare())
: flat_multiset(il.begin(), il.end(), comp) { }
template
- flat_multiset(initializer_list il, const key_compare& comp, const Allocator& a);
+ flat_multiset(initializer_list il, const key_compare& comp,
+ const Allocator& a);
template
- flat_multiset(initializer_list il, const Allocator& a);
+ flat_multiset(initializer_list il, const Allocator& a);
- flat_multiset(sorted_equivalent_t s, initializer_list il,
+ flat_multiset(sorted_equivalent_t s, initializer_list il,
const key_compare& comp = key_compare())
: flat_multiset(s, il.begin(), il.end(), comp) { }
template
- flat_multiset(sorted_equivalent_t, initializer_list il,
+ flat_multiset(sorted_equivalent_t, initializer_list il,
const key_compare& comp, const Allocator& a);
template
- flat_multiset(sorted_equivalent_t, initializer_list il, const Allocator& a);
+ flat_multiset(sorted_equivalent_t, initializer_list il, const Allocator& a);
- flat_multiset& operator=(initializer_list);
+ flat_multiset& operator=(initializer_list);
// iterators
iterator begin() noexcept;
@@ -17058,9 +17101,9 @@
template<@\exposconcept{container-compatible-range}@ R>
void insert_range(R&& rg);
- void insert(initializer_list il)
+ void insert(initializer_list il)
{ insert(il.begin(), il.end()); }
- void insert(sorted_equivalent_t s, initializer_list il)
+ void insert(sorted_equivalent_t s, initializer_list il)
{ insert(s, il.begin(), il.end()); }
container_type extract() &&;
@@ -17237,14 +17280,14 @@
template
flat_multiset(sorted_equivalent_t, InputIterator first, InputIterator last, const Allocator& a);
template
- flat_multiset(initializer_list il, const key_compare& comp, const Allocator& a);
+ flat_multiset(initializer_list il, const key_compare& comp, const Allocator& a);
template
- flat_multiset(initializer_list il, const Allocator& a);
+ flat_multiset(initializer_list il, const Allocator& a);
template
- flat_multiset(sorted_equivalent_t, initializer_list il,
+ flat_multiset(sorted_equivalent_t, initializer_list il,
const key_compare& comp, const Allocator& a);
template
- flat_multiset(sorted_equivalent_t, initializer_list il, const Allocator& a);
+ flat_multiset(sorted_equivalent_t, initializer_list il, const Allocator& a);
\end{itemdecl}
\begin{itemdescr}
@@ -17269,11 +17312,11 @@
\begin{itemdescr}
\pnum
\constraints
-\tcode{is_constructible_v} is \tcode{true}.
+\tcode{is_constructible_v} is \tcode{true}.
\pnum
\effects
-First, initializes an object \tcode{t} of type \tcode{key_type}
+First, initializes an object \tcode{t} of type \tcode{value_type}
with \tcode{std::forward(args)...},
then inserts \tcode{t} as if by:
\begin{codeblock}
@@ -17286,7 +17329,7 @@
An iterator that points to the inserted element.
\end{itemdescr}
-\indexlibrarymember{insert}{flat_mulitset}%
+\indexlibrarymember{insert}{flat_multiset}%
\begin{itemdecl}
template
void insert(InputIterator first, InputIterator last);
@@ -17462,7 +17505,9 @@
The header \libheader{mdspan} defines the class template \tcode{mdspan} and
other facilities for interacting with these multidimensional views.
-\rSec2[span.syn]{Header \tcode{} synopsis}%
+\rSec2[views.contiguous]{Contiguous access}
+
+\rSec3[span.syn]{Header \tcode{} synopsis}%
\indexheader{span}%
\begin{codeblock}
@@ -17475,9 +17520,9 @@
class span;
template
- inline constexpr bool ranges::enable_view> = true;
+ constexpr bool ranges::enable_view> = true;
template
- inline constexpr bool ranges::enable_borrowed_range> = true;
+ constexpr bool ranges::enable_borrowed_range> = true;
// \ref{span.objectrep}, views of object representation
template
@@ -17490,9 +17535,9 @@
}
\end{codeblock}
-\rSec2[views.span]{Class template \tcode{span}}
+\rSec3[views.span]{Class template \tcode{span}}
-\rSec3[span.overview]{Overview}
+\rSec4[span.overview]{Overview}
\pnum
\indexlibraryglobal{span}%
@@ -17580,8 +17625,8 @@
constexpr const_reverse_iterator crend() const noexcept { return rend(); }
private:
- pointer data_; // \expos
- size_type size_; // \expos
+ pointer @\exposid{data_}@; // \expos
+ size_type @\exposid{size_}@; // \expos
};
template
@@ -17605,7 +17650,7 @@
\tcode{ElementType} is required to be
a complete object type that is not an abstract class type.
-\rSec3[span.cons]{Constructors, copy, and assignment}
+\rSec4[span.cons]{Constructors, copy, and assignment}
\indexlibraryctor{span}%
\begin{itemdecl}
@@ -17654,8 +17699,8 @@
\pnum
\effects
-Initializes \tcode{data_} with \tcode{to_address(first)} and
-\tcode{size_} with \tcode{count}.
+Initializes \tcode{\exposid{data_}} with \tcode{to_address(first)} and
+\tcode{\exposid{size_}} with \tcode{count}.
\pnum
\throws
@@ -17697,8 +17742,8 @@
\pnum
\effects
-Initializes \tcode{data_} with \tcode{to_address(first)} and
-\tcode{size_} with \tcode{last - first}.
+Initializes \tcode{\exposid{data_}} with \tcode{to_address(first)} and
+\tcode{\exposid{size_}} with \tcode{last - first}.
\pnum
\throws
@@ -17775,8 +17820,8 @@
\pnum
\effects
-Initializes \tcode{data_} with \tcode{ranges::data(r)} and
-\tcode{size_} with \tcode{ranges::size(r)}.
+Initializes \tcode{\exposid{data_}} with \tcode{ranges::data(r)} and
+\tcode{\exposid{size_}} with \tcode{ranges::size(r)}.
\pnum
\throws
@@ -17845,7 +17890,7 @@
\tcode{size() == other.size() \&\& data() == other.data()}.
\end{itemdescr}
-\rSec3[span.deduct]{Deduction guides}
+\rSec4[span.deduct]{Deduction guides}
\indexlibrary{\idxcode{span}!deduction guide}%
\begin{itemdecl}
@@ -17871,7 +17916,7 @@
\tcode{R} satisfies \tcode{ranges::\libconcept{contiguous_range}}.
\end{itemdescr}
-\rSec3[span.sub]{Subviews}
+\rSec4[span.sub]{Subviews}
\indexlibrarymember{span}{first}%
\begin{itemdecl}
@@ -18004,7 +18049,7 @@
\end{codeblock}
\end{itemdescr}
-\rSec3[span.obs]{Observers}
+\rSec4[span.obs]{Observers}
\indexlibrarymember{span}{size}%
\begin{itemdecl}
@@ -18014,7 +18059,7 @@
\begin{itemdescr}
\pnum
\effects
-Equivalent to: \tcode{return size_;}
+Equivalent to: \tcode{return \exposid{size_};}
\end{itemdescr}
\indexlibrarymember{span}{size_bytes}%
@@ -18039,7 +18084,7 @@
Equivalent to: \tcode{return size() == 0;}
\end{itemdescr}
-\rSec3[span.elem]{Element access}
+\rSec4[span.elem]{Element access}
\indexlibrary{\idxcode{operator[]}!\idxcode{span}}%
\begin{itemdecl}
@@ -18094,10 +18139,10 @@
\begin{itemdescr}
\pnum
\effects
-Equivalent to: \tcode{return data_;}
+Equivalent to: \tcode{return \exposid{data_};}
\end{itemdescr}
-\rSec3[span.iterators]{Iterator support}
+\rSec4[span.iterators]{Iterator support}
\indexlibrarymember{iterator}{span}%
\begin{itemdecl}
@@ -18167,7 +18212,6 @@
Equivalent to: \tcode{return reverse_iterator(begin());}
\end{itemdescr}
-
\rSec3[span.objectrep]{Views of object representation}
\indexlibraryglobal{as_bytes}%
@@ -18202,36 +18246,9 @@
where \tcode{R} is the return type.
\end{itemdescr}
-\rSec2[mdspan.syn]{Header \tcode{} synopsis}
+\rSec2[views.multidim]{Multidimensional access}
-\indexheader{mdspan}%
-\begin{codeblock}
-namespace std {
- // \ref{mdspan.extents}, class template \tcode{extents}
- template
- class extents;
-
- // \ref{mdspan.extents.dextents}, alias template \tcode{dextents}
- template
- using dextents = @\seebelow@;
-
- // \ref{mdspan.layout}, layout mapping
- struct layout_left;
- struct layout_right;
- struct layout_stride;
-
- // \ref{mdspan.accessor.default}, class template \tcode{default_accessor}
- template
- class default_accessor;
-
- // \ref{mdspan.mdspan}, class template \tcode{mdspan}
- template>
- class mdspan;
-}
-\end{codeblock}
-
-\rSec2[mdspan.overview]{Overview}
+\rSec3[mdspan.overview]{Overview}
\pnum
A \defnadj{multidimensional}{index space} is
@@ -18262,9 +18279,38 @@
in the interval $[L_i, U_i)$ of $S$.
\end{itemize}
-\rSec2[mdspan.extents]{Class template \tcode{extents}}
+\rSec3[mdspan.syn]{Header \tcode{} synopsis}
+
+\indexheader{mdspan}%
+\begin{codeblock}
+namespace std {
+ // \ref{mdspan.extents}, class template \tcode{extents}
+ template
+ class extents;
+
+ // \ref{mdspan.extents.dextents}, alias template \tcode{dextents}
+ template
+ using dextents = @\seebelow@;
+
+ // \ref{mdspan.layout}, layout mapping
+ struct layout_left;
+ struct layout_right;
+ struct layout_stride;
-\rSec3[mdspan.extents.overview]{Overview}
+ // \ref{mdspan.accessor.default}, class template \tcode{default_accessor}
+ template
+ class default_accessor;
+
+ // \ref{mdspan.mdspan}, class template \tcode{mdspan}
+ template>
+ class mdspan;
+}
+\end{codeblock}
+
+\rSec3[mdspan.extents]{Class template \tcode{extents}}
+
+\rSec4[mdspan.extents.overview]{Overview}
The class template \tcode{extents} represents
a multidimensional index space of rank equal to \tcode{sizeof...(Extents)}.
@@ -18350,10 +18396,10 @@
The $r^\text{th}$ interval of the multidimensional index space
represented by an \tcode{extents} object is $[0, D_r)$.
-\rSec3[mdspan.extents.expo]{Exposition-only helpers}
+\rSec4[mdspan.extents.expo]{Exposition-only helpers}
\begin{itemdecl}
-static constexpr rank_type @\exposid{dynamic-index}@(rank_type i) noexcept; // \expos
+static constexpr rank_type @\exposid{dynamic-index}@(rank_type i) noexcept;
\end{itemdecl}
\begin{itemdescr}
@@ -18367,7 +18413,7 @@
\end{itemdescr}
\begin{itemdecl}
-static constexpr rank_type @\exposid{dynamic-index-inv}@(rank_type i) noexcept; // \expos
+static constexpr rank_type @\exposid{dynamic-index-inv}@(rank_type i) noexcept;
\end{itemdecl}
\begin{itemdescr}
@@ -18382,7 +18428,7 @@
\end{itemdescr}
\begin{itemdecl}
-constexpr size_t @\exposid{fwd-prod-of-extents}@(rank_type i) const noexcept; // \expos
+constexpr size_t @\exposid{fwd-prod-of-extents}@(rank_type i) const noexcept;
\end{itemdecl}
\begin{itemdescr}
@@ -18398,7 +18444,7 @@
\end{itemdescr}
\begin{itemdecl}
-constexpr size_t @\exposid{rev-prod-of-extents}@(rank_type i) const noexcept; // \expos
+constexpr size_t @\exposid{rev-prod-of-extents}@(rank_type i) const noexcept;
\end{itemdecl}
\begin{itemdescr}
@@ -18416,7 +18462,7 @@
\begin{itemdecl}
template