diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
index 925ac7e8fe..f3d4a5f770 100644
--- a/.github/workflows/check.yml
+++ b/.github/workflows/check.yml
@@ -22,7 +22,7 @@ jobs:
steps:
- name: checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: install GNU tools
if: matrix.cfg.os == 'macos-13'
@@ -68,7 +68,7 @@ jobs:
- name: upload PDF
if: matrix.cfg.os == 'ubuntu-22.04'
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: draft-snapshot
path: source/std.pdf
diff --git a/papers/n4982.html b/papers/n4982.html
new file mode 100644
index 0000000000..3f97397fec
--- /dev/null
+++ b/papers/n4982.html
@@ -0,0 +1,613 @@
+
+
+
+
+
+N4982
+
+
+N4982 Editors’ Report:
Programming Languages — C++
+
+Date: 2024-04-16
+
+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.
+
+New papers
+
+
+- N4981 is the
+current working draft for C++26. It replaces
+N4971.
+- N4982 is this Editors' Report.
+
+
+Motions incorporated into working draft
+
+Notes on motions
+
+All motions were applied cleanly.
+
+Core working group polls
+
+CWG Poll 1. Accept as Defect Reports and apply the proposed resolutions of all issues in
+P3196R0
+(Core Language Working Group "ready" Issues for the March, 2024 meeting) to the C++ Working Paper.
+
+CWG Poll 2. Apply the changes in
+P2748R5
+(Disallow Binding a Returned Glvalue to a Temporary) to the C++ Working Paper.
+
+CWG Poll 3. Accept as a Defect Report and apply the changes in P3106R1 (Clarifying rules for brace elision in aggregate initialization) to the C++ Working Paper, resolving core issue 2149.
+
+CWG Poll 4. Apply the changes in
+P0609R3
+(Attributes for Structured Bindings) to the C++ Working Paper.
+
+CWG Poll 5. Accept as a Defect Report and apply the changes in
+P3034R1
+(Module Declarations Shouldn’t be Macros) to the C++ Working Paper.
+
+CWG Poll 6. Accept as a Defect Report and apply the changes in
+P2809R3
+(Trivial infinite loops are not Undefined Behavior) to the C++ Working Paper.
+
+CWG Poll 7. Apply the changes in
+P2795R5
+(Erroneous behaviour for uninitialized reads) to the C++ Working Paper.
+
+CWG Poll 9. Apply the changes in
+P2573R2
+(= delete("should have a reason");
) to the C++ Working Paper.
+
+CWG Poll 10. Apply the changes in
+P2893R3
+(Variadic friends) to the C++ Working Paper.
+
+CWG Poll 8 was withdrawn.
+
+Library working group polls
+
+LWG Poll 1: Apply the changes for all Ready and Tentatively Ready issues in
+P3180R0
+(C++ Standard Library Ready Issues to be moved in Tokyo, Mar. 2024) to the C++ working paper.
+
+LWG Poll 2: Apply the changes in
+P2875R4
+(Undeprecate polymorphic_allocator::destroy
for C++26) to the C++ working paper.
+
+LWG Poll 3: Apply the changes in
+P2867R2
+(Remove Deprecated strstream
s From C++26) to the C++ working paper.
+
+LWG Poll 4: Apply the changes in
+P2869R4
+(Remove Deprecated shared_ptr
Atomic Access APIs from C++26) to the C++ working paper.
+
+LWG Poll 5: Apply the changes in
+P2872R3
+(Remove wstring_convert
From C++26) to the C++ working paper.
+
+LWG Poll 6: Accept as a Defect Report and apply the changes in
+P3107R5
+(Permit an efficient implementation of std::print
) to the C++ working paper.
+
+LWG Poll 7: Apply the changes in
+P3142R0
+(Printing Blank Lines with println
) to the C++ working paper.
+
+LWG Poll 8: Apply the changes in
+P2845R8
+(Formatting of std::filesystem::path
) to the C++ working paper.
+
+LWG Poll 9: Apply the changes in
+P0493R5
+(Atomic minimum/maximum) to the C++ working paper.
+
+LWG Poll 10: Apply the changes in
+P2542R8
+(views::concat
) to the C++ working paper.
+
+LWG Poll 11: Apply the changes in
+P2591R5
+(Concatenation of strings and string views) to the C++ working paper.
+
+LWG Poll 12: Apply the changes in
+P2248R8
+(Enabling list-initialization for algorithms) to the C++ working paper.
+
+LWG Poll 13: Apply the changes in
+P2810R4
+(is_debugger_present
is_replaceable
) to the C++ working paper.
+
+LWG Poll 14: Apply the changes in
+P1068R11
+(Vector API for random number generation) to the C++ working paper.
+
+LWG Poll 16: Apply the changes in
+P2944R3
+(Comparisons for reference_wrapper
) to the C++ working paper.
+
+LWG Poll 17: Apply the changes in
+P2642R6
+(Padded mdspan
layouts) to the C++ working paper.
+
+LWG Poll 18: Apply the changes in
+P3029R1
+(Better mdspan
's CTAD) to the C++ working paper.
+
+LWG Poll 15 was withdrawn.
+
+Editorial changes
+
+Major editorial changes
+
+There have not been any major editorial changes since the last working draft.
+
+Minor editorial changes
+
+A log of editorial fixes made to the working draft since N4971 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 08649a5a81ba91d8597c263b99dc80ed71767940
+Author: Jan Schultke <me@eisenwave.net>
+Date: Fri Dec 22 11:33:39 2023 +0100
+
+ [stmt.expr] Use \grammarterm for expression (#6469)
+
+commit acb68797051c9a6a5f51e4adb5091b376f1ba13a
+Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+Date: Mon Jan 1 16:23:56 2024 +0100
+
+ [basic.life] Fix indentation in example (#6727)
+
+commit f6692f25130834672ba5a212f739100669abbbe8
+Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+Date: Tue Jan 2 20:21:54 2024 +0100
+
+ [basic.scope.pdecl,basic.types.general] Remove extra whitespace (#6756)
+
+commit 7ddcd43c96589fc13342ac4cee549da75360fde7
+Author: Alisdair Meredith <alisdairm@me.com>
+Date: Fri Jan 5 15:41:01 2024 -0500
+
+ [basic.scope.param] Add missing \grammarterm for requires-expression (#6759)
+
+commit 29c0e4882a1ae62e7cd5f8d3fabcb22ae6153219
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Dec 18 17:22:30 2023 +0100
+
+ [std] Remove problematic 'requires' phrases from notes.
+
+ Only specific phrases involving the word "required" are problematic,
+ namely when they appear to establish a normative requirement. They
+ have been reworded, often by replacing "is required" with "needs",
+ sometimes with slightly larger edits.
+
+commit 43fc5a16147e720568b68ecae77f12fa3fb15102
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Fri Jan 5 15:32:55 2024 +0000
+
+ [std] Reword "necessary", "permitted", "allowed", "may" in notes.
+
+ This is so that notes do not (inappropriately) state requirements or
+ permissions.
+
+commit 74433025763f83bbccfb001dab8aa084647ffb2f
+Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+Date: Thu Jan 11 19:11:17 2024 +0100
+
+ [basic.def] Fix punctuation (#6766)
+
+commit b67e0b70e88abf65d9b49875133c68d55744b1de
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Fri Jan 12 12:53:10 2024 +0000
+
+ [text.encoding.overview] Use same parameter names as detailed description (#6768)
+
+commit bc5a56b6e9cadd030d48066601fc8098382c7469
+Author: Casey Carter <Casey@Carter.net>
+Date: Mon Jan 15 11:19:13 2024 -0800
+
+ [exception] Paragraph two is no longer universally true
+
+ We recently added `bad_expected_access<void>` to the Standard Library, which derives from `exception`, but does not have "the following publicly accessible member functions, each of them having a non-throwing exception specification." For clarity, we should point out that this provision is not universal.
+
+commit 2055c2feabee6ec9df24ea07f8451ad33618be45
+Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+Date: Tue Jan 16 09:20:44 2024 +0100
+
+ [zombie.names] Remove superfluous period (#6774)
+
+commit 8410aac1b84ec161b6990441acde53185f958135
+Author: Daniel Krügler <daniel.kruegler@gmail.com>
+Date: Sun Jan 21 22:39:02 2024 +0100
+
+ [tuple.helper] Paragraph 1 not universally true (#6777)
+
+ [tuple.helper] p1 defines a general requirement that all specializations of `tuple_size`
+ shall meet the *Cpp17UnaryTypeTrait* requirements, but p4 actually defines a
+ special situation where this requirement is not met ("Otherwise, it has no member value").
+ We have the same seemingly contradiction in [depr.tuple] p2. For clarity, we should
+ point out that this provision is not universal.
+
+commit 4fe9190fa05c4fb4e83c1a1ba68aa12aa49542e9
+Author: S. B. Tam <cpplearner@outlook.com>
+Date: Sat Jan 27 14:38:55 2024 +0800
+
+ [locale.ctype.members] Add missing parameter name
+
+commit 74f5f61cac56a4eca5389a51754fe7e60e6b7449
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Sat Jan 27 11:26:37 2024 +0000
+
+ [tuple.cnstr] Do not use code font for cardinal number 1 (#6785)
+
+commit cb8ff12806b67990665100baaacb9a16040bce8c
+Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+Date: Sat Jan 27 17:11:23 2024 +0100
+
+ [container.alloc.reqmts] End note with period (#6787)
+
+commit 70b99af0dfcb9cae82bcd97c7b24a2e84edfb2cd
+Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+Date: Sat Jan 27 18:03:16 2024 +0100
+
+ [class.mem.general,class.mfct.non.static] End note with period (#6778)
+
+commit db80a4612af561e8473fd8fb3724ae9db2c72578
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Mon Feb 5 15:51:03 2024 +0000
+
+ [rand.dist.samp.plinear] Fix copy & paste error in Mandates (#6794)
+
+ This error was present in the incoming P1719R2 paper (Mandating the
+ Standard Library: Clause 26 - Numerics Library), but is obviously bogus.
+ There is no UnaryOperation type in that constructor. The correct
+ requirement is taken from the corresponding constructor in
+ [rand.dist.samp.pconst].
+
+commit e51d5733b1bd1531d6e3b63617d12414a56678c0
+Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
+Date: Wed Feb 7 10:37:06 2024 -0500
+
+ [temp.res.general] Grammatical parallelism: remove a stray "a" (#6796)
+
+commit 8238252bcec14f76e97133db32721beaec5c749b
+Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+Date: Thu Feb 8 06:59:10 2024 +0100
+
+ [iterator.concept.winc] Fix typo (#6800)
+
+commit 19caa61068d3f3aa2453e1ba7256536b8464c25c
+Author: A. Jiang <de34@live.cn>
+Date: Thu Dec 28 10:07:15 2023 +0800
+
+ [mem.res.private] Say `*this` instead of improper `this`
+
+commit 419190062806ae257e5efe7057551fd626bd9516
+Author: A. Jiang <de34@live.cn>
+Date: Thu Dec 28 10:08:04 2023 +0800
+
+ [mem.res.monotonic.buffer.mem] Say `*this` instead of improper `this`
+
+commit 6ecda0b20664fc6b8450157e1cd9f0580c32e5e1
+Author: A. Jiang <de34@live.cn>
+Date: Thu Dec 28 10:09:08 2023 +0800
+
+ [re.traits] Say `*this` instead of improper `this`
+
+commit 9305893dfd250d876edf4555cf96c665e2e71e75
+Author: Casey Carter <Casey@Carter.net>
+Date: Thu Feb 15 13:16:33 2024 -0800
+
+ [thread.once.callonce] INVOKE is evaluated, not called (#6810)
+
+commit 3616a40ded794e94181a5405672b1c36f7774684
+Author: Jan Schultke <me@eisenwave.net>
+Date: Wed Feb 21 19:05:13 2024 +0100
+
+ [temp.pre] Add comma after introductory clause (#6814)
+
+commit 30debb0c5d5dc42fa36864aac76b82f49319ad84
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Feb 21 21:39:56 2024 +0100
+
+ [temp.constr.order] Move index entry to correct paragraph (#6812)
+
+commit fb0277664fd53efea93d95202784f78aea610f31
+Author: Jan Schultke <me@eisenwave.net>
+Date: Thu Feb 22 20:28:15 2024 +0100
+
+ [semaphore.syn] Add binary_semaphore to index (#6781)
+
+commit 090840673ee58d3c1e8d2844d3c716ee5ce245bc
+Author: Jan Schultke <me@eisenwave.net>
+Date: Thu Feb 22 20:31:19 2024 +0100
+
+ [format.parse.ctx] Improve readability of paragraphs 12 and 14 (#6815)
+
+commit a5825b1905b06d730a46e64fb5b379f48cbc6e51
+Author: Jan Schultke <me@eisenwave.net>
+Date: Thu Feb 22 20:33:18 2024 +0100
+
+ [format.parse.ctx] Add comma (#6817)
+
+commit 8c8e05d7ff6cda6329ca898e7a270547a85675d7
+Author: Jan Schultke <me@eisenwave.net>
+Date: Thu Feb 22 20:35:21 2024 +0100
+
+ [format.parse.ctx] Move non-normative explanations of errors into notes (#6816)
+
+commit 48f90026631638c91b3d8138bed49cd0450380c7
+Author: Eisenwave <me@eisenwave.net>
+Date: Wed Feb 28 10:23:51 2024 +0100
+
+ [stmt.while] Add comma after introductory phrase
+
+commit d5ad3794937429b1410071037af9ddfb0aa8c861
+Author: Eisenwave <me@eisenwave.net>
+Date: Wed Feb 28 10:24:26 2024 +0100
+
+ [stmt.do] Add comma after introductory phrase
+
+commit 78ecd23f22f00be4bffaf806a6747417ce2150a2
+Author: Jan Schultke <me@eisenwave.net>
+Date: Wed Feb 28 18:06:26 2024 +0100
+
+ [stmt.jump] Add cross-reference to [stmt.dcl] for destruction of local variables (#6829)
+
+commit 66b6b97c8f3969f96e3ca8df1180c18b1c57af8c
+Author: Jan Schultke <me@eisenwave.net>
+Date: Wed Feb 28 21:50:50 2024 +0100
+
+ [expr.dynamic.cast] Add comma after conditional clause (#6830)
+
+commit 23430d7e605d62f5a4a1769611e3c415d6510b65
+Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+Date: Fri Mar 1 11:06:34 2024 +0100
+
+ [bibliography] Replace HTTP link with HTTPS link (#6831)
+
+commit 20c2851a3c8f480a017cef6602b1b6a4d32bc5e4
+Author: Eisenwave <me@eisenwave.net>
+Date: Fri Mar 1 16:03:04 2024 +0100
+
+ [time.parse] Hyphenate argument-dependent lookup
+
+commit e0287d17110f86e3724bda5ebe74de249508490f
+Author: Eisenwave <me@eisenwave.net>
+Date: Fri Mar 1 16:04:02 2024 +0100
+
+ [diff.cpp17.temp] Hyphenate argument-dependent lookup
+
+commit ceff4ea83b511be01a8e1756386ce6a2e06e323c
+Author: Jan Schultke <me@eisenwave.net>
+Date: Fri Mar 1 18:06:00 2024 +0100
+
+ [headers] Strike incorrect quote of subclause heading (#6832)
+
+commit 9878cfbea12b517d32c5af1bbfa7c8b8c4ff9cab
+Author: Jan Schultke <me@eisenwave.net>
+Date: Sun Mar 3 08:42:45 2024 +0100
+
+ [handler.functions] Add cross-reference to [intro.races] (#6845)
+
+commit 9ec133c8e51aae98297255563250a2f6656e4636
+Author: lprv <100177227+lprv@users.noreply.github.com>
+Date: Tue Mar 19 15:36:51 2024 +0000
+
+ [time.hash] Fix spelling of 'Cpp17Hash'
+
+commit 2b7cd6e8be2bc8a9ae97da9bf03ae4efa7fe1a9c
+Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+Date: Tue Apr 16 20:03:29 2024 +0800
+
+ [expos.only.entity] Add/fix \expos for exposition-only names (#6924)
+
+commit aa21c812f629975d5d25d4639053482f346751a8
+Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
+Date: Tue Apr 16 08:07:44 2024 -0400
+
+ [dcl.type.elab] Move note to separate paragraph
+
+ Also clarify that the next paragraph is talking about any elaborated-type-specifier at all, not just the ones in p4.
+
+commit 397384c90e3ead9f832a3a269335fbfe53328180
+Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+Date: Fri Feb 16 06:51:03 2024 +0100
+
+ [rand.adapt.ibits,rand.dist.pois.poisson] Add namespace std in class template
+
+ [rand.adapt.ibits] 28.5.5.3-4
+ [rand.dist.pois.poisson] 28.5.9.4.1-1
+
+commit fbf3d76683d269a0a5313fb69b5aa483ddd3a18a
+Author: Jan Schultke <me@eisenwave.net>
+Date: Thu Feb 22 21:41:42 2024 +0100
+
+ [expr.unary.op] remove redundant value category wording
+
+commit 498cd7720bb2e53fb323144f956e67900a054e34
+Author: Daniel Krügler <daniel.kruegler@gmail.com>
+Date: Sun Feb 4 17:57:38 2024 +0100
+
+ [iterator.requirements.general] Clarify that "constexpr iterator" is a requirement to be met
+
+ [iterator.requirements.general] p16 says "Iterators are called _constexpr iterators_ [..]", but all referencing sections say "meet the constexpr iterator requirements". For clarity, we should reword the definition to make it clear that this is a named requirement.
+
+commit 89cd1467f354a2b9b05ac57ad1f90f483aab22b9
+Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+Date: Sun Jan 28 13:54:17 2024 +0800
+
+ [range.drop.overview] Remove redundant \iref for subrange
+
+ ..which already existed in the previous bullet.
+
+commit bee055de1c5e23ce0b301138998633dc64169b4a
+Author: A. Jiang <de34@live.cn>
+Date: Thu Nov 23 09:33:39 2023 +0800
+
+ [dcl.init.ref] Change "function lvalue" to "lvalue of function type"
+
+commit ce31d424ba6753be1c87a4cf3face42f89b9e010
+Author: A. Jiang <de34@live.cn>
+Date: Thu Nov 23 09:36:28 2023 +0800
+
+ [over.ics.ref] Simplify wording by not using "function lvalue"
+
+commit 2a07c133732dcc7ea57aeb32612b15b50837a4df
+Author: A. Jiang <de34@live.cn>
+Date: Thu Nov 23 09:38:41 2023 +0800
+
+ [over.ics.rank] Change "function lvalue" to "lvalue of function type"
+
+commit 7675c4c1abf1986241e8a20463fd71f2841d3c39
+Author: Eisenwave <me@eisenwave.net>
+Date: Fri Sep 1 10:27:25 2023 +0200
+
+ [res.on.exception.handling] use grammarterm instead of informal term and add ref
+
+
+
diff --git a/papers/n4982.md b/papers/n4982.md
new file mode 100644
index 0000000000..92a68b0900
--- /dev/null
+++ b/papers/n4982.md
@@ -0,0 +1,472 @@
+# N4982 Editors' Report -- Programming Languages -- C++
+
+Date: 2024-04-16
+
+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.
+
+## New papers
+
+ * [N4981](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/n4981.pdf) is the
+ current working draft for C++26. It replaces
+ [N4971](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4971.pdf).
+ * N4982 is this Editors' Report.
+
+## Motions incorporated into working draft
+
+### Notes on motions
+
+All motions were applied cleanly.
+
+### Core working group polls
+
+CWG Poll 1. Accept as Defect Reports and apply the proposed resolutions of all issues in
+[P3196R0](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3196r0.html)
+(Core Language Working Group "ready" Issues for the March, 2024 meeting) to the C++ Working Paper.
+
+CWG Poll 2. Apply the changes in
+[P2748R5](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2748r5.html)
+(Disallow Binding a Returned Glvalue to a Temporary) to the C++ Working Paper.
+
+CWG Poll 3. Accept as a Defect Report and apply the changes in [P3106R1](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3106r1.html) (Clarifying rules for brace elision in aggregate initialization) to the C++ Working Paper, resolving core issue 2149.
+
+CWG Poll 4. Apply the changes in
+[P0609R3](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p0609r3.pdf)
+(Attributes for Structured Bindings) to the C++ Working Paper.
+
+CWG Poll 5. Accept as a Defect Report and apply the changes in
+[P3034R1](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3034r1.html)
+(Module Declarations Shouldn’t be Macros) to the C++ Working Paper.
+
+CWG Poll 6. Accept as a Defect Report and apply the changes in
+[P2809R3](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2809r3.html)
+(Trivial infinite loops are not Undefined Behavior) to the C++ Working Paper.
+
+CWG Poll 7. Apply the changes in
+[P2795R5](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2795r5.html)
+(Erroneous behaviour for uninitialized reads) to the C++ Working Paper.
+
+CWG Poll 9. Apply the changes in
+[P2573R2](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2573r2.html)
+(`= delete("should have a reason");`) to the C++ Working Paper.
+
+CWG Poll 10. Apply the changes in
+[P2893R3](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2893r3.html)
+(Variadic friends) to the C++ Working Paper.
+
+CWG Poll 8 was withdrawn.
+
+### Library working group polls
+
+LWG Poll 1: Apply the changes for all Ready and Tentatively Ready issues in
+[P3180R0](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3180r0.html)
+(C++ Standard Library Ready Issues to be moved in Tokyo, Mar. 2024) to the C++ working paper.
+
+LWG Poll 2: Apply the changes in
+[P2875R4](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2875r4.pdf)
+(Undeprecate `polymorphic_allocator::destroy` for C++26) to the C++ working paper.
+
+LWG Poll 3: Apply the changes in
+[P2867R2](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2867r2.html)
+(Remove Deprecated `strstream`s From C++26) to the C++ working paper.
+
+LWG Poll 4: Apply the changes in
+[P2869R4](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2869r4.pdf)
+(Remove Deprecated `shared_ptr` Atomic Access APIs from C++26) to the C++ working paper.
+
+LWG Poll 5: Apply the changes in
+[P2872R3](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2872r3.pdf)
+(Remove `wstring_convert` From C++26) to the C++ working paper.
+
+LWG Poll 6: Accept as a Defect Report and apply the changes in
+[P3107R5](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3107r5.html)
+(Permit an efficient implementation of `std::print`) to the C++ working paper.
+
+LWG Poll 7: Apply the changes in
+[P3142R0](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3142r0.pdf)
+(Printing Blank Lines with `println`) to the C++ working paper.
+
+LWG Poll 8: Apply the changes in
+[P2845R8](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2845r8.html)
+(Formatting of `std::filesystem::path`) to the C++ working paper.
+
+LWG Poll 9: Apply the changes in
+[P0493R5](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p0493r5.pdf)
+(Atomic minimum/maximum) to the C++ working paper.
+
+LWG Poll 10: Apply the changes in
+[P2542R8](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2542r8.html)
+(`views::concat`) to the C++ working paper.
+
+LWG Poll 11: Apply the changes in
+[P2591R5](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2591r5.html)
+(Concatenation of strings and string views) to the C++ working paper.
+
+LWG Poll 12: Apply the changes in
+[P2248R8](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html)
+(Enabling list-initialization for algorithms) to the C++ working paper.
+
+LWG Poll 13: Apply the changes in
+[P2810R4](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2810r4.html)
+(`is_debugger_present` `is_replaceable`) to the C++ working paper.
+
+LWG Poll 14: Apply the changes in
+[P1068R11](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p1068r11.html)
+(Vector API for random number generation) to the C++ working paper.
+
+LWG Poll 16: Apply the changes in
+[P2944R3](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2944r3.html)
+(Comparisons for `reference_wrapper`) to the C++ working paper.
+
+LWG Poll 17: Apply the changes in
+[P2642R6](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
+(Padded `mdspan` layouts) to the C++ working paper.
+
+LWG Poll 18: Apply the changes in
+[P3029R1](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3029r1.html)
+(Better `mdspan`'s CTAD) to the C++ working paper.
+
+LWG Poll 15 was withdrawn.
+
+## Editorial changes
+
+### Major editorial changes
+
+There have not been any major editorial changes since the last working draft.
+
+### Minor editorial changes
+
+A log of editorial fixes made to the working draft since N4971 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/n4971...n4981).
+
+ commit 08649a5a81ba91d8597c263b99dc80ed71767940
+ Author: Jan Schultke
+ Date: Fri Dec 22 11:33:39 2023 +0100
+
+ [stmt.expr] Use \grammarterm for expression (#6469)
+
+ commit acb68797051c9a6a5f51e4adb5091b376f1ba13a
+ Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+ Date: Mon Jan 1 16:23:56 2024 +0100
+
+ [basic.life] Fix indentation in example (#6727)
+
+ commit f6692f25130834672ba5a212f739100669abbbe8
+ Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+ Date: Tue Jan 2 20:21:54 2024 +0100
+
+ [basic.scope.pdecl,basic.types.general] Remove extra whitespace (#6756)
+
+ commit 7ddcd43c96589fc13342ac4cee549da75360fde7
+ Author: Alisdair Meredith
+ Date: Fri Jan 5 15:41:01 2024 -0500
+
+ [basic.scope.param] Add missing \grammarterm for requires-expression (#6759)
+
+ commit 29c0e4882a1ae62e7cd5f8d3fabcb22ae6153219
+ Author: Jens Maurer
+ Date: Mon Dec 18 17:22:30 2023 +0100
+
+ [std] Remove problematic 'requires' phrases from notes.
+
+ Only specific phrases involving the word "required" are problematic,
+ namely when they appear to establish a normative requirement. They
+ have been reworded, often by replacing "is required" with "needs",
+ sometimes with slightly larger edits.
+
+ commit 43fc5a16147e720568b68ecae77f12fa3fb15102
+ Author: Thomas Köppe
+ Date: Fri Jan 5 15:32:55 2024 +0000
+
+ [std] Reword "necessary", "permitted", "allowed", "may" in notes.
+
+ This is so that notes do not (inappropriately) state requirements or
+ permissions.
+
+ commit 74433025763f83bbccfb001dab8aa084647ffb2f
+ Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+ Date: Thu Jan 11 19:11:17 2024 +0100
+
+ [basic.def] Fix punctuation (#6766)
+
+ commit b67e0b70e88abf65d9b49875133c68d55744b1de
+ Author: Jonathan Wakely
+ Date: Fri Jan 12 12:53:10 2024 +0000
+
+ [text.encoding.overview] Use same parameter names as detailed description (#6768)
+
+ commit bc5a56b6e9cadd030d48066601fc8098382c7469
+ Author: Casey Carter
+ Date: Mon Jan 15 11:19:13 2024 -0800
+
+ [exception] Paragraph two is no longer universally true
+
+ We recently added `bad_expected_access` to the Standard Library, which derives from `exception`, but does not have "the following publicly accessible member functions, each of them having a non-throwing exception specification." For clarity, we should point out that this provision is not universal.
+
+ commit 2055c2feabee6ec9df24ea07f8451ad33618be45
+ Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+ Date: Tue Jan 16 09:20:44 2024 +0100
+
+ [zombie.names] Remove superfluous period (#6774)
+
+ commit 8410aac1b84ec161b6990441acde53185f958135
+ Author: Daniel Krügler
+ Date: Sun Jan 21 22:39:02 2024 +0100
+
+ [tuple.helper] Paragraph 1 not universally true (#6777)
+
+ [tuple.helper] p1 defines a general requirement that all specializations of `tuple_size`
+ shall meet the *Cpp17UnaryTypeTrait* requirements, but p4 actually defines a
+ special situation where this requirement is not met ("Otherwise, it has no member value").
+ We have the same seemingly contradiction in [depr.tuple] p2. For clarity, we should
+ point out that this provision is not universal.
+
+ commit 4fe9190fa05c4fb4e83c1a1ba68aa12aa49542e9
+ Author: S. B. Tam
+ Date: Sat Jan 27 14:38:55 2024 +0800
+
+ [locale.ctype.members] Add missing parameter name
+
+ commit 74f5f61cac56a4eca5389a51754fe7e60e6b7449
+ Author: Jonathan Wakely
+ Date: Sat Jan 27 11:26:37 2024 +0000
+
+ [tuple.cnstr] Do not use code font for cardinal number 1 (#6785)
+
+ commit cb8ff12806b67990665100baaacb9a16040bce8c
+ Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+ Date: Sat Jan 27 17:11:23 2024 +0100
+
+ [container.alloc.reqmts] End note with period (#6787)
+
+ commit 70b99af0dfcb9cae82bcd97c7b24a2e84edfb2cd
+ Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+ Date: Sat Jan 27 18:03:16 2024 +0100
+
+ [class.mem.general,class.mfct.non.static] End note with period (#6778)
+
+ commit db80a4612af561e8473fd8fb3724ae9db2c72578
+ Author: Jonathan Wakely
+ Date: Mon Feb 5 15:51:03 2024 +0000
+
+ [rand.dist.samp.plinear] Fix copy & paste error in Mandates (#6794)
+
+ This error was present in the incoming P1719R2 paper (Mandating the
+ Standard Library: Clause 26 - Numerics Library), but is obviously bogus.
+ There is no UnaryOperation type in that constructor. The correct
+ requirement is taken from the corresponding constructor in
+ [rand.dist.samp.pconst].
+
+ commit e51d5733b1bd1531d6e3b63617d12414a56678c0
+ Author: Arthur O'Dwyer
+ Date: Wed Feb 7 10:37:06 2024 -0500
+
+ [temp.res.general] Grammatical parallelism: remove a stray "a" (#6796)
+
+ commit 8238252bcec14f76e97133db32721beaec5c749b
+ Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+ Date: Thu Feb 8 06:59:10 2024 +0100
+
+ [iterator.concept.winc] Fix typo (#6800)
+
+ commit 19caa61068d3f3aa2453e1ba7256536b8464c25c
+ Author: A. Jiang
+ Date: Thu Dec 28 10:07:15 2023 +0800
+
+ [mem.res.private] Say `*this` instead of improper `this`
+
+ commit 419190062806ae257e5efe7057551fd626bd9516
+ Author: A. Jiang
+ Date: Thu Dec 28 10:08:04 2023 +0800
+
+ [mem.res.monotonic.buffer.mem] Say `*this` instead of improper `this`
+
+ commit 6ecda0b20664fc6b8450157e1cd9f0580c32e5e1
+ Author: A. Jiang
+ Date: Thu Dec 28 10:09:08 2023 +0800
+
+ [re.traits] Say `*this` instead of improper `this`
+
+ commit 9305893dfd250d876edf4555cf96c665e2e71e75
+ Author: Casey Carter
+ Date: Thu Feb 15 13:16:33 2024 -0800
+
+ [thread.once.callonce] INVOKE is evaluated, not called (#6810)
+
+ commit 3616a40ded794e94181a5405672b1c36f7774684
+ Author: Jan Schultke
+ Date: Wed Feb 21 19:05:13 2024 +0100
+
+ [temp.pre] Add comma after introductory clause (#6814)
+
+ commit 30debb0c5d5dc42fa36864aac76b82f49319ad84
+ Author: Jens Maurer
+ Date: Wed Feb 21 21:39:56 2024 +0100
+
+ [temp.constr.order] Move index entry to correct paragraph (#6812)
+
+ commit fb0277664fd53efea93d95202784f78aea610f31
+ Author: Jan Schultke
+ Date: Thu Feb 22 20:28:15 2024 +0100
+
+ [semaphore.syn] Add binary_semaphore to index (#6781)
+
+ commit 090840673ee58d3c1e8d2844d3c716ee5ce245bc
+ Author: Jan Schultke
+ Date: Thu Feb 22 20:31:19 2024 +0100
+
+ [format.parse.ctx] Improve readability of paragraphs 12 and 14 (#6815)
+
+ commit a5825b1905b06d730a46e64fb5b379f48cbc6e51
+ Author: Jan Schultke
+ Date: Thu Feb 22 20:33:18 2024 +0100
+
+ [format.parse.ctx] Add comma (#6817)
+
+ commit 8c8e05d7ff6cda6329ca898e7a270547a85675d7
+ Author: Jan Schultke
+ Date: Thu Feb 22 20:35:21 2024 +0100
+
+ [format.parse.ctx] Move non-normative explanations of errors into notes (#6816)
+
+ commit 48f90026631638c91b3d8138bed49cd0450380c7
+ Author: Eisenwave
+ Date: Wed Feb 28 10:23:51 2024 +0100
+
+ [stmt.while] Add comma after introductory phrase
+
+ commit d5ad3794937429b1410071037af9ddfb0aa8c861
+ Author: Eisenwave
+ Date: Wed Feb 28 10:24:26 2024 +0100
+
+ [stmt.do] Add comma after introductory phrase
+
+ commit 78ecd23f22f00be4bffaf806a6747417ce2150a2
+ Author: Jan Schultke
+ Date: Wed Feb 28 18:06:26 2024 +0100
+
+ [stmt.jump] Add cross-reference to [stmt.dcl] for destruction of local variables (#6829)
+
+ commit 66b6b97c8f3969f96e3ca8df1180c18b1c57af8c
+ Author: Jan Schultke
+ Date: Wed Feb 28 21:50:50 2024 +0100
+
+ [expr.dynamic.cast] Add comma after conditional clause (#6830)
+
+ commit 23430d7e605d62f5a4a1769611e3c415d6510b65
+ Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+ Date: Fri Mar 1 11:06:34 2024 +0100
+
+ [bibliography] Replace HTTP link with HTTPS link (#6831)
+
+ commit 20c2851a3c8f480a017cef6602b1b6a4d32bc5e4
+ Author: Eisenwave
+ Date: Fri Mar 1 16:03:04 2024 +0100
+
+ [time.parse] Hyphenate argument-dependent lookup
+
+ commit e0287d17110f86e3724bda5ebe74de249508490f
+ Author: Eisenwave
+ Date: Fri Mar 1 16:04:02 2024 +0100
+
+ [diff.cpp17.temp] Hyphenate argument-dependent lookup
+
+ commit ceff4ea83b511be01a8e1756386ce6a2e06e323c
+ Author: Jan Schultke
+ Date: Fri Mar 1 18:06:00 2024 +0100
+
+ [headers] Strike incorrect quote of subclause heading (#6832)
+
+ commit 9878cfbea12b517d32c5af1bbfa7c8b8c4ff9cab
+ Author: Jan Schultke
+ Date: Sun Mar 3 08:42:45 2024 +0100
+
+ [handler.functions] Add cross-reference to [intro.races] (#6845)
+
+ commit 9ec133c8e51aae98297255563250a2f6656e4636
+ Author: lprv <100177227+lprv@users.noreply.github.com>
+ Date: Tue Mar 19 15:36:51 2024 +0000
+
+ [time.hash] Fix spelling of 'Cpp17Hash'
+
+ commit 2b7cd6e8be2bc8a9ae97da9bf03ae4efa7fe1a9c
+ Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+ Date: Tue Apr 16 20:03:29 2024 +0800
+
+ [expos.only.entity] Add/fix \expos for exposition-only names (#6924)
+
+ commit aa21c812f629975d5d25d4639053482f346751a8
+ Author: Arthur O'Dwyer
+ Date: Tue Apr 16 08:07:44 2024 -0400
+
+ [dcl.type.elab] Move note to separate paragraph
+
+ Also clarify that the next paragraph is talking about any elaborated-type-specifier at all, not just the ones in p4.
+
+ commit 397384c90e3ead9f832a3a269335fbfe53328180
+ Author: Andreas Krug <153394595+Andreas-Krug@users.noreply.github.com>
+ Date: Fri Feb 16 06:51:03 2024 +0100
+
+ [rand.adapt.ibits,rand.dist.pois.poisson] Add namespace std in class template
+
+ [rand.adapt.ibits] 28.5.5.3-4
+ [rand.dist.pois.poisson] 28.5.9.4.1-1
+
+ commit fbf3d76683d269a0a5313fb69b5aa483ddd3a18a
+ Author: Jan Schultke
+ Date: Thu Feb 22 21:41:42 2024 +0100
+
+ [expr.unary.op] remove redundant value category wording
+
+ commit 498cd7720bb2e53fb323144f956e67900a054e34
+ Author: Daniel Krügler
+ Date: Sun Feb 4 17:57:38 2024 +0100
+
+ [iterator.requirements.general] Clarify that "constexpr iterator" is a requirement to be met
+
+ [iterator.requirements.general] p16 says "Iterators are called _constexpr iterators_ [..]", but all referencing sections say "meet the constexpr iterator requirements". For clarity, we should reword the definition to make it clear that this is a named requirement.
+
+ commit 89cd1467f354a2b9b05ac57ad1f90f483aab22b9
+ Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+ Date: Sun Jan 28 13:54:17 2024 +0800
+
+ [range.drop.overview] Remove redundant \iref for subrange
+
+ ..which already existed in the previous bullet.
+
+ commit bee055de1c5e23ce0b301138998633dc64169b4a
+ Author: A. Jiang
+ Date: Thu Nov 23 09:33:39 2023 +0800
+
+ [dcl.init.ref] Change "function lvalue" to "lvalue of function type"
+
+ commit ce31d424ba6753be1c87a4cf3face42f89b9e010
+ Author: A. Jiang
+ Date: Thu Nov 23 09:36:28 2023 +0800
+
+ [over.ics.ref] Simplify wording by not using "function lvalue"
+
+ commit 2a07c133732dcc7ea57aeb32612b15b50837a4df
+ Author: A. Jiang
+ Date: Thu Nov 23 09:38:41 2023 +0800
+
+ [over.ics.rank] Change "function lvalue" to "lvalue of function type"
+
+ commit 7675c4c1abf1986241e8a20463fd71f2841d3c39
+ Author: Eisenwave
+ Date: Fri Sep 1 10:27:25 2023 +0200
+
+ [res.on.exception.handling] use grammarterm instead of informal term and add ref
diff --git a/papers/wd-index.md b/papers/wd-index.md
index 5ea3d75a59..19b0d4c6a9 100644
--- a/papers/wd-index.md
+++ b/papers/wd-index.md
@@ -48,3 +48,4 @@
* [N4958](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4958.pdf) 2023-08 C++ Working Draft
* [N4964](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4964.pdf) 2023-10 C++ Working Draft
* [N4971](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4971.pdf) 2023-12 C++ Working Draft
+ * [N4981](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/n4981.pdf) 2024-03 C++ Working Draft
diff --git a/source/algorithms.tex b/source/algorithms.tex
index ff4c3b38ed..ec47564de5 100644
--- a/source/algorithms.tex
+++ b/source/algorithms.tex
@@ -24,6 +24,7 @@
\ref{alg.sorting} & Sorting and related operations & \\ \rowsep
\ref{numeric.ops} & Generalized numeric operations & \tcode{} \\ \rowsep
\ref{specialized.algorithms} & Specialized \tcode{} algorithms & \tcode{} \\ \rowsep
+\ref{alg.rand} & Specialized \tcode{} algorithms & \tcode{} \\ \rowsep
\ref{alg.c.library} & C library algorithms & \tcode{} \\
\end{libsumtab}
@@ -707,10 +708,12 @@
// \ref{alg.contains}, contains
namespace ranges {
- template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class T, class Proj = identity>
+ template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class Proj = identity,
+ class T = projected_value_t>
requires @\libconcept{indirect_binary_predicate}@, const T*>
constexpr bool contains(I first, S last, const T& value, Proj proj = {});
- template<@\libconcept{input_range}@ R, class T, class Proj = identity>
+ template<@\libconcept{input_range}@ R, class Proj = identity,
+ class T = projected_value_t, Proj>>
requires
@\libconcept{indirect_binary_predicate}@, Proj>, const T*>
constexpr bool contains(R&& r, const T& value, Proj proj = {});
@@ -766,10 +769,11 @@
}
// \ref{alg.find}, find
- template
+ template::value_type>
constexpr InputIterator find(InputIterator first, InputIterator last,
const T& value);
- template
+ template::value_type>
ForwardIterator find(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, ForwardIterator last,
const T& value);
@@ -789,10 +793,12 @@
Predicate pred);
namespace ranges {
- template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class T, class Proj = identity>
+ template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class Proj = identity,
+ class T = projected_value_t>
requires @\libconcept{indirect_binary_predicate}@, const T*>
constexpr I find(I first, S last, const T& value, Proj proj = {});
- template<@\libconcept{input_range}@ R, class T, class Proj = identity>
+ template<@\libconcept{input_range}@ R, class Proj = identity,
+ class T = projected_value_t, Proj>>
requires @\libconcept{indirect_binary_predicate}@, Proj>, const T*>
constexpr borrowed_iterator_t
@@ -943,10 +949,11 @@
}
// \ref{alg.count}, count
- template
+ template::value_type>
constexpr typename iterator_traits::difference_type
count(InputIterator first, InputIterator last, const T& value);
- template
+ template::value_type>
typename iterator_traits::difference_type
count(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, ForwardIterator last, const T& value);
@@ -959,11 +966,13 @@
ForwardIterator first, ForwardIterator last, Predicate pred);
namespace ranges {
- template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class T, class Proj = identity>
+ template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class Proj = identity,
+ class T = projected_value_t>
requires @\libconcept{indirect_binary_predicate}@, const T*>
constexpr iter_difference_t
count(I first, S last, const T& value, Proj proj = {});
- template<@\libconcept{input_range}@ R, class T, class Proj = identity>
+ template<@\libconcept{input_range}@ R, class Proj = identity,
+ class T = projected_value_t, Proj>>
requires @\libconcept{indirect_binary_predicate}@, Proj>, const T*>
constexpr range_difference_t
@@ -1157,21 +1166,24 @@
Proj1 proj1 = {}, Proj2 proj2 = {});
}
- template
+ template::value_type>
constexpr ForwardIterator
search_n(ForwardIterator first, ForwardIterator last,
Size count, const T& value);
- template
+ template::value_type, class BinaryPredicate>
constexpr ForwardIterator
search_n(ForwardIterator first, ForwardIterator last,
Size count, const T& value, BinaryPredicate pred);
- template
+ template::value_type>
ForwardIterator
search_n(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, ForwardIterator last,
Size count, const T& value);
- template
+ template::value_type, class BinaryPredicate>
ForwardIterator
search_n(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, ForwardIterator last,
@@ -1179,14 +1191,15 @@
BinaryPredicate pred);
namespace ranges {
- template<@\libconcept{forward_iterator}@ I, @\libconcept{sentinel_for}@ S, class T,
- class Pred = ranges::equal_to, class Proj = identity>
+ template<@\libconcept{forward_iterator}@ I, @\libconcept{sentinel_for}@ S,
+ class Pred = ranges::equal_to, class Proj = identity,
+ class T = projected_value_t>
requires @\libconcept{indirectly_comparable}@
constexpr subrange
search_n(I first, S last, iter_difference_t count,
const T& value, Pred pred = {}, Proj proj = {});
- template<@\libconcept{forward_range}@ R, class T, class Pred = ranges::equal_to,
- class Proj = identity>
+ template<@\libconcept{forward_range}@ R, class Pred = ranges::equal_to,
+ class Proj = identity, class T = projected_value_t>
requires @\libconcept{indirectly_comparable}@, const T*, Pred, Proj>
constexpr borrowed_subrange_t
search_n(R&& r, range_difference_t count,
@@ -1255,11 +1268,12 @@
concept @\defexposconcept{indirectly-binary-right-foldable}@ = // \expos
@\exposconcept{indirectly-binary-left-foldable}@<@\exposid{flipped}@, T, I>;
- template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class T,
+ template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class T = iter_value_t,
@\exposconcept{indirectly-binary-left-foldable}@ F>
constexpr auto fold_left(I first, S last, T init, F f);
- template<@\libconcept{input_range}@ R, class T, @\exposconcept{indirectly-binary-left-foldable}@> F>
+ template<@\libconcept{input_range}@ R, class T = range_value_t,
+ @\exposconcept{indirectly-binary-left-foldable}@> F>
constexpr auto fold_left(R&& r, T init, F f);
template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S,
@@ -1271,11 +1285,11 @@
requires @\libconcept{constructible_from}@, range_reference_t>
constexpr auto fold_left_first(R&& r, F f);
- template<@\libconcept{bidirectional_iterator}@ I, @\libconcept{sentinel_for}@ S, class T,
+ template<@\libconcept{bidirectional_iterator}@ I, @\libconcept{sentinel_for}@ S, class T = iter_value_t,
@\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,
+ template<@\libconcept{bidirectional_range}@ R, class T = range_value_t,
@\exposconcept{indirectly-binary-right-foldable}@> F>
constexpr auto fold_right(R&& r, T init, F f);
@@ -1294,11 +1308,12 @@
template
using fold_left_first_with_iter_result = in_value_result;
- template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class T,
+ template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class T = iter_value_t,
@\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>
+ template<@\libconcept{input_range}@ R, class T = range_value_t,
+ @\exposconcept{indirectly-binary-left-foldable}@> F>
constexpr @\seebelow@ fold_left_with_iter(R&& r, T init, F f);
template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S,
@@ -1532,35 +1547,41 @@
template
constexpr void replace(ForwardIterator first, ForwardIterator last,
const T& old_value, const T& new_value);
- template
+ template::value_type>
void replace(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, ForwardIterator last,
const T& old_value, const T& new_value);
- template
+ template::value_type>
constexpr void replace_if(ForwardIterator first, ForwardIterator last,
Predicate pred, const T& new_value);
- template
+ template::value_type>
void replace_if(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, ForwardIterator last,
Predicate pred, const T& new_value);
namespace ranges {
- template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class T1, class T2, class Proj = identity>
+ template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class Proj = identity,
+ class T1 = projected_value_t, class T2 = T1>
requires @\libconcept{indirectly_writable}@ &&
@\libconcept{indirect_binary_predicate}@, const T1*>
constexpr I
replace(I first, S last, const T1& old_value, const T2& new_value, Proj proj = {});
- template<@\libconcept{input_range}@ R, class T1, class T2, class Proj = identity>
+ template<@\libconcept{input_range}@ R, class Proj = identity,
+ class T1 = projected_value_t, Proj>, class T2 = T1>
requires @\libconcept{indirectly_writable}@, const T2&> &&
@\libconcept{indirect_binary_predicate}@, Proj>, const T1*>
constexpr borrowed_iterator_t
replace(R&& r, const T1& old_value, const T2& new_value, Proj proj = {});
- template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class T, class Proj = identity,
+ template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class Proj = identity,
+ class T = projected_value_t,
@\libconcept{indirect_unary_predicate}@> Pred>
requires @\libconcept{indirectly_writable}@
constexpr I replace_if(I first, S last, Pred pred, const T& new_value, Proj proj = {});
- template<@\libconcept{input_range}@ R, class T, class Proj = identity,
+ template<@\libconcept{input_range}@ R, class Proj = identity, class T = projected_value_t,
@\libconcept{indirect_unary_predicate}@, Proj>> Pred>
requires @\libconcept{indirectly_writable}@, const T&>
constexpr borrowed_iterator_t
@@ -1576,12 +1597,13 @@
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result,
const T& old_value, const T& new_value);
- template
+ template::value_type>
constexpr OutputIterator replace_copy_if(InputIterator first, InputIterator last,
OutputIterator result,
Predicate pred, const T& new_value);
template
+ class Predicate, class T = iterator_traits::value_type>
ForwardIterator2 replace_copy_if(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result,
@@ -1591,18 +1613,21 @@
template
using replace_copy_result = in_out_result;
- template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class T1, class T2,
- @\libconcept{output_iterator}@ O, class Proj = identity>
+ template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class O,
+ class Proj = identity,
+ class T1 = projected_value_t, class T2 = iter_value_t>
requires @\libconcept{indirectly_copyable}@ &&
- @\libconcept{indirect_binary_predicate}@, const T1*>
+ @\libconcept{indirect_binary_predicate}@, const T1*> &&
+ @\libconcept{output_iterator}@
constexpr replace_copy_result
replace_copy(I first, S last, O result, const T1& old_value, const T2& new_value,
Proj proj = {});
- template<@\libconcept{input_range}@ R, class T1, class T2, @\libconcept{output_iterator}@ O,
- class Proj = identity>
+ template<@\libconcept{input_range}@ R, class O, class Proj = identity,
+ class T1 = projected_value_t, Proj>, class T2 = iter_value_t>
requires @\libconcept{indirectly_copyable}@, O> &&
@\libconcept{indirect_binary_predicate}@, Proj>, const T1*>
+ projected, Proj>, const T1*> &&
+ @\libconcept{output_iterator}@
constexpr replace_copy_result, O>
replace_copy(R&& r, O result, const T1& old_value, const T2& new_value,
Proj proj = {});
@@ -1610,39 +1635,44 @@
template
using replace_copy_if_result = in_out_result;
- template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class T, @\libconcept{output_iterator}@ O,
+ template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, class O, class T = iter_value_t
class Proj = identity, @\libconcept{indirect_unary_predicate}@> Pred>
- requires @\libconcept{indirectly_copyable}@
+ requires @\libconcept{indirectly_copyable}@ && @\libconcept{output_iterator}@
constexpr replace_copy_if_result
replace_copy_if(I first, S last, O result, Pred pred, const T& new_value,
Proj proj = {});
- template<@\libconcept{input_range}@ R, class T, @\libconcept{output_iterator}@ O, class Proj = identity,
+ template<@\libconcept{input_range}@ R, class O, class T = iter_value_t, class Proj = identity,
@\libconcept{indirect_unary_predicate}@, Proj>> Pred>
- requires @\libconcept{indirectly_copyable}@, O>
+ requires @\libconcept{indirectly_copyable}@, O> && @\libconcept{output_iterator}@
constexpr replace_copy_if_result, O>
replace_copy_if(R&& r, O result, Pred pred, const T& new_value,
Proj proj = {});
}
// \ref{alg.fill}, fill
- template
+ template::value_type>
constexpr void fill(ForwardIterator first, ForwardIterator last, const T& value);
- template
+ template::value_type>
void fill(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, ForwardIterator last, const T& value);
- template
+ template::value_type>
constexpr OutputIterator fill_n(OutputIterator first, Size n, const T& value); // freestanding
template
+ class Size, class T = iterator_traits::value_type>
ForwardIterator fill_n(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, Size n, const T& value);
namespace ranges {
- template O, @\libconcept{sentinel_for}@ S>
+ template S, class T = iter_value_t>
+ requires @\libconcept{output_iterator}@
constexpr O fill(O first, S last, const T& value);
- template R>
+ template>
+ requires @\libconcept{output_range}@
constexpr borrowed_iterator_t fill(R&& r, const T& value);
- template O>
+ template>
+ requires @\libconcept{output_iterator}@ O>
constexpr O fill_n(O first, iter_difference_t n, const T& value);
}
@@ -1673,10 +1703,11 @@
}
// \ref{alg.remove}, remove
- template
+ template::value_type>
constexpr ForwardIterator remove(ForwardIterator first, ForwardIterator last,
const T& value);
- template
+ template::value_type>
ForwardIterator remove(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, ForwardIterator last,
const T& value);
@@ -1689,10 +1720,12 @@
Predicate pred);
namespace ranges {
- template<@\libconcept{permutable}@ I, @\libconcept{sentinel_for}@ S, class T, class Proj = identity>
+ template<@\libconcept{permutable}@ I, @\libconcept{sentinel_for}@ S, class Proj = identity,
+ class T = projected_value_t>
requires @\libconcept{indirect_binary_predicate}@, const T*>
constexpr subrange remove(I first, S last, const T& value, Proj proj = {});
- template<@\libconcept{forward_range}@ R, class T, class Proj = identity>
+ template<@\libconcept{forward_range}@ R, class Proj = identity,
+ class T = projected_value_t, Proj>>
requires @\libconcept{permutable}@> &&
@\libconcept{indirect_binary_predicate}@, Proj>, const T*>
@@ -1708,12 +1741,13 @@
remove_if(R&& r, Pred pred, Proj proj = {});
}
- template
+ template::value_type>
constexpr OutputIterator
remove_copy(InputIterator first, InputIterator last,
OutputIterator result, const T& value);
template
+ class T = iterator_traits::value_type>
ForwardIterator2
remove_copy(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator1 first, ForwardIterator1 last,
@@ -1733,13 +1767,14 @@
template
using remove_copy_result = in_out_result;
- template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, @\libconcept{weakly_incrementable}@ O, class T,
- class Proj = identity>
+ template<@\libconcept{input_iterator}@ I, @\libconcept{sentinel_for}@ S, @\libconcept{weakly_incrementable}@ O,
+ class Proj = identity, class T = projected_value_t>
requires @\libconcept{indirectly_copyable}@ &&
@\libconcept{indirect_binary_predicate}@, const T*>
constexpr remove_copy_result
remove_copy(I first, S last, O result, const T& value, Proj proj = {});
- template<@\libconcept{input_range}@ R, @\libconcept{weakly_incrementable}@ O, class T, class Proj = identity>
+ template<@\libconcept{input_range}@ R, @\libconcept{weakly_incrementable}@ O, class Proj = identity,
+ class T = projected_value_t, Proj>>
requires @\libconcept{indirectly_copyable}@, O> &&
@\libconcept{indirect_binary_predicate}@, Proj>, const T*>
@@ -2192,83 +2227,95 @@
}
// \ref{alg.binary.search}, binary search
- template
+ template::value_type>
constexpr ForwardIterator
lower_bound(ForwardIterator first, ForwardIterator last,
const T& value);
- template
+ template::value_type,
+ class Compare>
constexpr ForwardIterator
lower_bound(ForwardIterator first, ForwardIterator last,
const T& value, Compare comp);
namespace ranges {
- template<@\libconcept{forward_iterator}@ I, @\libconcept{sentinel_for}@ S, class T, class Proj = identity,
+ template<@\libconcept{forward_iterator}@ I, @\libconcept{sentinel_for}@ S, class Proj = identity,
+ class T = projected_value_t,
@\libconcept{indirect_strict_weak_order}@> Comp = ranges::less>
constexpr I lower_bound(I first, S last, const T& value, Comp comp = {},
Proj proj = {});
- template<@\libconcept{forward_range}@ R, class T, class Proj = identity,
+ template<@\libconcept{forward_range}@ R, class Proj = identity,
+ class T = projected_value_t, Proj>,
@\libconcept{indirect_strict_weak_order}@, Proj>> Comp =
ranges::less>
constexpr borrowed_iterator_t
lower_bound(R&& r, const T& value, Comp comp = {}, Proj proj = {});
}
- template
+ template::value_type>
constexpr ForwardIterator
upper_bound(ForwardIterator first, ForwardIterator last,
const T& value);
- template
+ template::value_type,
+ class Compare>
constexpr ForwardIterator
upper_bound(ForwardIterator first, ForwardIterator last,
const T& value, Compare comp);
namespace ranges {
- template<@\libconcept{forward_iterator}@ I, @\libconcept{sentinel_for}@ S, class T, class Proj = identity,
+ template<@\libconcept{forward_iterator}@ I, @\libconcept{sentinel_for}@ S, class Proj = identity,
+ class T = projected_value_t
@\libconcept{indirect_strict_weak_order}@> Comp = ranges::less>
constexpr I upper_bound(I first, S last, const T& value, Comp comp = {}, Proj proj = {});
- template<@\libconcept{forward_range}@ R, class T, class Proj = identity,
+ template<@\libconcept{forward_range}@ R, class Proj = identity,
+ class T = projected_value_t