diff --git a/papers/n4791.pdf b/papers/n4791.pdf
new file mode 100644
index 0000000000..1ceb9a25d0
Binary files /dev/null and b/papers/n4791.pdf differ
diff --git a/papers/n4792.html b/papers/n4792.html
new file mode 100644
index 0000000000..5369176202
--- /dev/null
+++ b/papers/n4792.html
@@ -0,0 +1,1073 @@
+
N4792
+N4792 Editors' Report -- Programming Languages -- C++
+
+2018-12-07
+Richard Smith (editor) (Google Inc)
+Thomas Köppe (co-editor) (Google DeepMind)
+Jens Maurer (co-editor)
+Dawn Perchik (co-editor) (Bright Side Computing, LLC)
+<cxxeditor@gmail.com>
+
+Acknowledgements
+
+Special thanks to Casey Carter
+and Tim Song
+for supplying the LaTeX sources for
+P0896R4 (LWG motion 25, 208 pages of wording changes)
+and
+P1148R0 (LWG motion 12, 55 pages of wording changes),
+respectively,
+and to Tony Van Eerd
+for supplying a pull request for
+P1085R2 (LWG motion 23).
+
+Thanks to all those who have submitted editorial
+issues
+and to those who have provided pull requests with fixes.
+
+New papers
+
+
+- N4791 is the current working draft for C++20. It replaces N4778.
+- N4792 is this Editors' Report.
+
+
+Papers N4788 and N4789 (earlier versions of the post-San-Diego Working Draft
+and Editors' Report) are withdrawn and replaced by the above papers due to an
+administrative hiccup.
+
+Motions incorporated into working draft
+
+Core working group motions
+
+CWG motion 1: Core issue resolutions for 3 issues in "tentatively ready" status applied, resolving 4 issues:
+
+
+- 1636 Bits required for negative enumerator values superseded by CWG Motion 10
+- 1781 Converting from
nullptr_t
to bool
in overload resolution
+- 2133 Converting
std::nullptr_t
to bool
resolved by resolution to CWG1781
+- 2373 Incorrect handling of static member function templates in partial ordering
+
+
+CWG motion 2: P0668R5 "Revising the C++ memory model"
+
+CWG motion 3: P0982R1 "Weaken release sequences"
+
+CWG motion 4: P1084R2 "Today's return-type-requirements are insufficient" see below
+
+CWG motion 5: P1131R2 "simple-template-id is ambiguous between class-name and type-name", resolving 1 core issue:
+
+
+- 2292 simple-template-id is ambiguous between class-name and type-name
+
+
+CWG motion 6: P1289R1 "Access control in contract conditions"
+
+CWG motion 7 was not approved
+
+CWG motion 8: P1002R1 "try
-catch
blocks in constexpr
functions"
+
+CWG motion 9: P1327R1 "Allowing dynamic_cast
, polymorphic typeid
in constant expressions"
+
+CWG motion 10: P1236R1 "Signed integers are two's complement" (wording for P0907R4)
+
+CWG motion 11: P0482R6 "char8_t
: a type for UTF-8 characters and strings" see below
+
+CWG motion 12: P1353R0 "Missing feature test macros"
+
+CWG motion 13: P1073R3 "Immediate functions"
+
+CWG motion 14: P0595R2 "std::is_constant_evaluated()
" see below
+
+CWG motion 15: P1141R2 "Yet another approach for constrained declarations" see below
+
+CWG motion 16: P1094R2 "Nested inline namespaces"
+
+CWG motion 17: P1330R0 "Changing the active member of a union inside constexpr
"
+
+Core motions added a total of 1 page to Clause 1-14.
+
+Library working group motions
+
+LWG motion 1 applies to the Concurrency TS
+
+LWG motions 2 and 3 apply to the Library Fundamentals TS
+
+LWG motion 4: Library issue resolutions for 9 issues in "Ready" status and 23 issues in "Tentatively Ready" status applied:
+
+
+- 2183 Muddled allocator requirements for
match_results
constructors
+- 2184 Muddled allocator requirements for
match_results
assignments
+- 2412
promise::set_value()
and promise::get_future()
should not race
+- 2682
filesystem::copy()
won't create a symlink to a directory
+- 2936 Path comparison is defined in terms of the generic format
+- 2943 Problematic specification of the wide version of
basic_filebuf::open
+- 2995
basic_stringbuf
default constructor forbids it from using SSO capacity
+- 2996 Missing rvalue overloads for
shared_ptr
operations
+- 3008
make_shared
(sub)object destruction semantics are not specified
+- 3025 Map-like container deduction guides should use
pair<Key, T>
, not pair<const Key, T>
+- 3031 Algorithms and predicates with non-const reference arguments
+- 3037
polymorphic_allocator
and incomplete types
+- 3038
polymorphic_allocator::allocate
should not allow integer overflow to create vulnerabilities
+- 3054
uninitialized_copy
appears to not be able to meet its exception-safety guarantee
+- 3065 LWG 2989 missed that all
path
's other operators should be hidden friends as well
+- 3096
path::lexically_relative
is confused by trailing slashes
+- 3116 OUTERMOST_ALLOC_TRAITS needs
remove_reference_t
+- 3122
__cpp_lib_chrono_udls
was accidentally dropped
+- 3127
basic_osyncstream::rdbuf
needs a const_cast
+- 3128
strstream::rdbuf
needs a const_cast
+- 3129
regex_token_iterator
constructor uses wrong pointer arithmetic
+- 3130 [input.output] needs many
addressof
+- 3131
addressof
all the things
+- 3132 Library needs to ban macros named
expects
or ensures
+- 3137 Header for
__cpp_lib_to_chars
+- 3140 COMMON_REF is unimplementable as specified
+- 3145
file_clock
breaks ABI for C++17 implementations
+- 3147 Definitions of
likely
and unlikely
are likely to cause problems
+- 3148
<concepts>
should be freestanding
+- 3153
Common
and common_type
have too little in common
+- 3154
Common
and CommonReference
have a common defect
+- 3160
atomic_ref() = delete;
should be deleted
+
+
+LWG motion 5: P1123R0 "Editorial guidance for merging P0019R8 and P0528R3" (see P0019R8, P0528R3)
+
+LWG motion 6: P0487R1 "Fixing operator>>(basic_istream&, CharT*)
", resolving 1 library issue:
+
+
+- 2499
operator>>(basic_istream&, CharT*)
makes it hard to avoid buffer overflows
+
+
+LWG motion 7: P0602R4 "variant
and optional
should propagate copy/move triviality"
+
+LWG motion 8: P0655R1 "visit<R>
: explicit return type for visit
"
+
+LWG motion 9: P0972R0 "<chrono>
zero()
, min()
, and max()
should be noexcept
"
+
+LWG motion 10: P1006R1 "constexpr
in std::pointer_traits
"
+
+LWG motion 11: P1032R1 "Miscellaneous constexpr
bits" see below
+
+LWG motion 12: P1148R0 "Cleaning up clause 20 (strings)"
+
+LWG motion 13: P0318R1 "unwrap_ref_decay
and unwrap_reference
" see below
+
+LWG motion 14: P0357R3 "reference_wrapper
for incomplete types"
+
+LWG motion 15: P0608R3 "A sane variant
converting constructor"
+
+LWG motion 16: P0771R1 "std::function
move constructor should be noexcept
"
+
+LWG motion 17: P1007R3 "std::assume_aligned
"
+
+LWG motion 18: P1020R1 "Smart pointer creation with default initialization"
+
+LWG motion 19: P1285R0 "Improving completeness requirements for type traits"
+
+LWG motion 20: P1248R1 "Remove CommonReference
requirement from StrictWeakOrdering
"
+
+LWG motion 21: P0591R4 "Utility functions to implement uses-allocator construction"
+
+LWG motion 22: P0899R1 "LWG 3016 is not a defect" (see LWG 3016)
+
+LWG motion 23: P1085R2 "Should span
be regular?"
+
+LWG motion 24: P1165R1 "Make stateful allocator propagation more consistent for operator+(basic_string)
"
+
+LWG motion 25: P0896R4 "The One Ranges proposal" see below
+
+LWG motion 26: P0356R5 "Simplified partial function application" see below
+
+LWG motion 27: P0919R3 "Heterogeneous lookup for unordered containers"
+
+LWG motion 28: P1209R0 "Adopt consistent container erasure from Library Fundamentals 2"
+
+Library motions added a total of 133 pages (and 1 Clause) to Clause 15-31.
+
+Notable editorial changes
+
+CWG motion 11 and CWG motion 10
+
+Rebased char8_t
wording on the revised description of fundamental types
+introduced by CWG motion 10. The description of unsigned char
as the
+underlying type of char8_t
now renders unnecessary some of the other
+wording in CWG motion 11; such wording has consequently not been applied.
+
+CWG motion 14
+
+After consulting with CWG, added the missing definition for "usable in constant
+expressions" as applied to objects and references.
+
+CWG motion 15
+
+Removed now-unused grammar production default-template-argument.
+
+CWG motion 15 and CWG motion 4
+
+CWG motion 4 adds new uses of the grammar production qualified-concept-name
+that CWG motion 15 removes. These have been updated to instead refer to the
+new production type-constraint, and the normative wording of CWG motion 4
+has been rewritten to use the new term "immediately-declared constraint",
+both of which were introduced by CWG motion 15.
+
+LWG motion 11
+
+Change 10 included an editing instruction to make matching changes elsewhere
+in the draft. There does not appear to be any "elsewhere" to make said changes.
+This editing instruction was ignored.
+
+LWG motion 13 and LWG motion 26
+
+The specification of bind_front
was simplified by replacing DECAY_UNWRAP
+a use of the new unwrap_ref_decay_t
alias template introduced by LWG motion 13.
+
+LWG motion 25
+
+The wording paper contained an unmarked modification of [std.iterator.tags],
+replacing "the most specific category tag" with "a category tag".
+After consulting with the paper authors, the change was intentional, and
+the corresponding edit has been applied despite not being marked up.
+
+LWG motion 25 and CWG motion 4
+
+CWG motion 4 removes a grammar production from requires-clauses, but
+LWG motion 25 adds new uses of said grammar production. Those uses are all
+of the form
+
+
+requires {
+ { expr } -> Same<T>&;
+}
+
+
+After consultation with LWG, these uses have been rewritten as
+
+
+requires {
+ { expr } -> Same<T&>;
+}
+
+
+which is believed to both correctly reflect the intent and not change the
+meaning in practice of any of the uses introduced by LWG motion 25.
+
+Additionally, CWG motion 4 contains an instruction to replace all constructs
+of the form
+
+
+requires {
+ E; requires Concept<decltype((E)), Args>;
+}
+
+
+with the simpler (but now equivalent)
+
+
+requires {
+ { E } -> Concept<Args>;
+}
+
+
+throughout [concepts]. However, LWG motion 25 adds many more instances of
+the former pattern throughout several other clauses. All such instances
+throughout the working draft have been replaced.
+
+LWG motion 26
+
+A feature test macro name __cpp_lib_bind_front
was recommended by the paper,
+but no wording changes were included to add said feature test macro to the
+working draft's table of feature test macros. The macro has been added to
+the table anyway.
+
+Section label changes
+
+Several section labels introduced by the motions papers have been modified
+to match our style guide. In addition to the section labels affected by the
+above motions, the following changes have been made:
+
+[string.op+=] has been renamed to [string.op.append].
+[string.op+] has been renamed to [string.op.plus].
+
+[re.regex.nmswap] was the only subclause in its parent [re.regex.nonmemb].
+The former heading has been removed, leaving the old content directly in
+[re.regex.nonmemb].
+
+[istream::sentry],
+[ostream::sentry],
+[ios::failure],
+[ios::fmtflatgs],
+[ios::iostate],
+[ios::openmode],
+[ios::seekdir], and
+[ios::Init]
+have been renamed, replacing the "::" with a "."
+and converting "Init" to lowercase.
+
+See the appendix "Cross-references from ISO C++ 2017" in the working draft
+for a full list of sectoin label changes since C++17.
+
+Minor editorial fixes
+
+A log of editorial fixes made to the working draft since N4778 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 e00fef979f7c0da235351f898010658f1f074b87
+Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
+Date: Thu Dec 6 21:48:24 2018 -0400
+
+ [iterator.synopsis] Add reference to [alg.req.sortable]
+
+commit 9d81b4fde6dfe2b28737a79ed39f92ef9a0ee030
+Author: Eelis van der Weegen <eelis@eelis.net>
+Date: Sun Dec 2 06:07:03 2018 +0100
+
+ [view.interface] Use "inherits"/"derives" consistently.
+
+commit 358fcdc442fd620f00673081223e4313cf0af499
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Nov 27 20:38:28 2018 +0100
+
+ [cpp.subst] Introduce grammar non-terminal 'va-opt-replacement'
+
+ to avoid repeated quotes of the token sequence.
+
+commit 4425a120b9a60d3c9e6aa3f1feb553082a9f1fbd
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Dec 7 21:37:02 2018 +0100
+
+ [iterator.concepts.readable] Turn parenthesized explanation into a note.
+
+commit de1093907b6deb7455b866d5c47a6a1a026a90a1
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Dec 7 22:27:20 2018 +0100
+
+ [temp.func.order] Adjust example to rules in [temp.deduct.partial].
+
+commit 07901a9f724b019c0b6634a9a0c39e5dd5208324
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Dec 1 17:31:53 2018 +0100
+
+ [input.output] Avoid colons in stable labels
+
+commit 6e5dba392d19241efed299c91670cc31fcbe3826
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Fri Dec 7 22:05:50 2018 +0000
+
+ [template.mask.array.overview] Fix nesting of parentheses; reflow source
+
+commit 36998eae97c6876c1f67dc0425c42555dbf0cea5
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Fri Dec 7 22:02:49 2018 +0000
+
+ [iterator.concept.iterator] Remove stray, mismatched parenthesis
+
+commit a5603f0cf1b35097a9892d9627eb03dc5cc3e154
+Author: JF Bastien <github@jfbastien.com>
+Date: Fri Dec 7 13:48:16 2018 -0800
+
+ [basic.fundamental] Remove a footnote that was describing a particular possible manifestation of undefined behaviour
+
+ The note was problematic, as (by omission) it suggested that such behaviour might not be true for other types.
+
+commit 8035cdb6de85ff0f541b3fc78f747d060ea50ef6
+Author: Johel Ernesto Guerrero Peña <johelegp@gmail.com>
+Date: Fri Dec 7 17:43:10 2018 -0400
+
+ [iterator.traits] Present concept requirements consistently (#2566)
+
+commit a4366dc5bf59d826a9b1aee82d317636a6239e9a
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Dec 7 21:51:55 2018 +0100
+
+ [iosfwd.syn] Change char_traits from 'class' to 'struct'. (#2570)
+
+commit 888da0bf8d0a07048dab8098197c7a326eda9e19
+Author: Thomas Köppe <tkoeppe@google.com>
+Date: Wed Dec 5 01:46:53 2018 +0000
+
+ [algorithms] Add missing closing delimiters
+
+commit 14db6ec65b7c3dbd9da2e112e09015bdcba3501f
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Tue Dec 4 23:01:27 2018 +0100
+
+ [atomics.types.operations]/20 Replace "E.g." at start of sentence with "For example,". (#2558)
+
+commit aadf7684f1e6c2fe1fa15ffa0cf2ee45b5e56cd7
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Mon Dec 3 22:54:57 2018 +0100
+
+ [re.grammar] Add missing closing parentheses. (#2552)
+
+commit 4fc0a426f700c03aeea5b5efe040af9f3c977df8
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Dec 1 14:32:10 2018 +0100
+
+ [utilities] Harmonize 'For T in Types' phrasing. (#2543)
+
+ No '...' for a pack expansion should appear after 'Types', and no index on 'T'.
+
+commit 334e9f546dcb786801b9bef428f7c0fb94bee79b
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Dec 1 03:34:10 2018 +0100
+
+ [dcl.init] Clarify standard conversions for built-in types (#2534)
+
+commit e6cd48f407698d882a08f2bc5e3aad8ea13b495e
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Dec 1 03:32:38 2018 +0100
+
+ [over.best.ics] Clarify ambiguous conversion sequence (#2532)
+
+commit 89f5b1dfbabf0b5755f4e516a3be9b1e2b78ffc2
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Nov 27 22:01:21 2018 +0100
+
+ [over.ics.ref] Use 'implicit conversion sequence',
+
+ not 'standard conversion sequence' where applicable.
+
+commit af1191e9f5a0ab93214849fbfed77f75b2da673b
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Nov 27 22:48:48 2018 +0100
+
+ [class.bit] Bit-fields of sufficient width can store any value of an enumeration,
+
+ not just values of enumerators.
+
+commit 5ef7f9cbb248402f6c74f01acba87292efb0b561
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Nov 27 22:19:14 2018 +0100
+
+ [dcl.init.aggr] Resolve grammar confusion around arrays of unknown bound
+
+commit 197db8c1fd3e57bc5c622a5e0ea9ac3f0c974e85
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Nov 28 08:04:34 2018 +0100
+
+ [dcl.inline,dcl.align] Strike redundant 'definition'
+
+ in phrases reading 'declaration or definition',
+ because a definition is also a declaration.
+
+commit ad6385ac9730786006205d6fdca92e1d45aea13a
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Nov 27 23:16:26 2018 +0100
+
+ [dcl.spec] Harmonize phrasing of restrictions on decl-specifiers
+
+commit f38c14be051d91bc6492d774d45a325154b7f307
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Tue Nov 27 23:28:09 2018 +0100
+
+ [depr.locale.category] Don't parenthesize reference after 'in'. (#2526)
+
+commit 3ba8b56c0ffa84cf8fe7bf78234fb8694d4d1498
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Tue Nov 27 12:10:20 2018 -0800
+
+ [atomics.types.generic] Remove note that tries to encourage
+ implementations to use the same size for atomic<T> as for T.
+
+ It's not appropriate for a note to contain "should" or implementation
+ encouragement of this kind. It's also bad advice.
+
+commit e23cbb5b79397dd07c4c7adbea35b90075c78268
+Author: Sergey Zubkov <cubbi@cubbi.com>
+Date: Tue Nov 27 03:11:37 2018 -0500
+
+ [allocator.uses.construction] the argument name is alloc, not allocator
+
+commit 41a8baa9f739154f2b8c3f6b9e8339ede031195b
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Mon Nov 26 19:21:14 2018 -0800
+
+ [unord.req] Undo change accidentally made in wrong table cell.
+
+ The intended table cell was already correctly updated.
+
+commit 9a720cd36a749057061b245772fb243678876b13
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Oct 11 20:53:10 2018 +0200
+
+ [dcl.enum] Merge duplicate normative paragraphs on redeclarations.
+
+ Also introduce the grammar non-terminal enum-head-name
+ to simplify the description.
+
+commit 5e37f798131c38a4c609af2b8c70ce0b7a6f102f
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Apr 2 21:50:03 2018 +0200
+
+ [stmt.while] Simplify rewrite rule.
+
+commit 84d93372e79b218701611ae8599cf885fcaf13b1
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Nov 26 12:45:01 2018 +0100
+
+ [string.classes] Avoid special characters in stable labels
+
+ and rename [string.comparison] to [string.cmp] per convention
+
+commit 05f51e0963f8f7e9186062d97306df128ee1fdcc
+Author: Casey Carter <Casey@Carter.net>
+Date: Mon Nov 26 13:06:53 2018 -0800
+
+ [iterator.operations] Simplify distance requirements; change to expects
+
+commit 90bb6f50af1d0181a158552399739cdeaf0b6ad7
+Author: Casey Carter <Casey@Carter.net>
+Date: Wed Oct 17 14:09:22 2018 -0700
+
+ [iterator.operations] Simplify advance requirements; change to expects
+
+commit 12589ca08e44ad3c6c215998ccdd92af3c02ca3b
+Author: Casey Carter <Casey@Carter.net>
+Date: Wed Oct 17 14:08:27 2018 -0700
+
+ [iterator.operations] advance does not decrement by a negative count
+
+commit 5f757d356d241d4fa6313f7375a275a59958358d
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Oct 18 20:20:05 2018 +0200
+
+ [dcl.init.aggr] Add example for anonymous union
+
+ initialized by a designated-initializer-list.
+
+commit b7aa3fe5f4e774edd8fe6239e707e0e0b1b44b41
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Nov 1 10:44:12 2018 +0100
+
+ [numeric.ops] Move [numerics.defns] to the point-of-use.
+
+commit 63d15762f452fcb4787b2ca7896d9bbfde7de3ad
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Nov 26 12:36:20 2018 +0100
+
+ [alg.find.end] and [alg.search] should not use "subsequence"
+
+commit 0f16b26b5a06b8a3cd0596ead96c54146d7e3178
+Author: Casey Carter <Casey@Carter.net>
+Date: Wed Nov 7 14:16:30 2018 -0800
+
+ [over.ics.user] Mark "user-defined conversion sequence" as a term of art
+
+commit 7e32ffd6c031771bb3a7568eb40ebe3d6b3417aa
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Nov 15 19:42:52 2018 +0100
+
+ [over.best.ics] Turn 'such as' list into a note
+
+commit 915c784c12ec4570974a67e98d0086e1933d0733
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Nov 26 23:42:17 2018 +0100
+
+ [iterators] Shorten labels for iterator concepts
+
+commit 3768294e5bac0fac1b40aee14c8615f6c3d2f08c
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Nov 26 23:35:13 2018 +0100
+
+ [iterators] Shorten stable labels for algorithm requirements
+
+commit fc0c0db579234fba09f87ee3fa7053f699066c2f
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Nov 26 11:59:42 2018 +0100
+
+ [ranges] Shorten and adjust stable labels
+
+commit fb5d52d59d6823d0e03b2e7ca85d76f43402efa8
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Nov 26 13:22:09 2018 +0100
+
+ [structure.summary] Add missing templated entities
+
+commit 944a64419594b455759168e089c5cd075ea848be
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Nov 26 13:33:33 2018 +0100
+
+ [func.bind_front] Use unwrap_ref_decay_t
+
+commit 12c55fcdff724855444d3e3ddfcc24ad93d9dd6a
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Nov 26 13:54:46 2018 +0100
+
+ [dcl.attr.contract.check] Remove redundant statement that violation handler is implementation-defined
+
+commit ae11d65ac5df8a7e605f07bc1d36ed584002fd15
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Nov 26 14:01:32 2018 +0100
+
+ [expr] Fix cross-references for 'composite pointer type'
+
+ to refer to [expr.type], not [expr.prop].
+
+commit 42f956e7e80a4dfd81608b366e4f7813332d7dc0
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Nov 26 18:31:42 2018 +0100
+
+ [temp] Use 'deduced as' instead of 'deduced to'
+
+ in comments explaining examples
+
+commit 602a81d2d88ec98fef3d4feeaf5b24079e1e2110
+Author: S. B. Tam <cpplearner@outlook.com>
+Date: Fri Oct 12 17:35:23 2018 +0800
+
+ [class.mem] Add opaque-enum-declaration to member-declaration
+
+commit 8ddcba4252b4a45194b8fdf4ebd2a439cb5e5147
+Author: Kazutoshi SATODA <k_satoda@f2.dion.ne.jp>
+Date: Tue Oct 30 08:58:23 2018 +0900
+
+ [conv.lval] Improve a bit more the note about std::nullptr_t case
+
+ - "read the object" -> "access the object"
+ The "read" was derived from the rule at [intro.execution], but it
+ didn't fit well here.
+ - "the object" -> "the object to which the glvalue refers"
+ Make it clear what "the object" refers to.
+
+ https://github.com/cplusplus/draft/pull/2372#pullrequestreview-169248002
+
+commit 0b35a4688d09a385488f0d23c296afa622d7b02e
+Author: Kazutoshi SATODA <k_satoda@f2.dion.ne.jp>
+Date: Thu Oct 25 02:59:31 2018 +0900
+
+ [conv.lval] Improve the note about std::nullptr_t case
+
+ The meaning of "fetched from memory" is vague, and the two uses of term
+ "access" [defns.access] are inappropreate here because
+ - it causes undefined behavior to access an inactive member of a
+ union, based on the rule of out-of-lifetime object [basic.life]:
+ > The program has undefined behavior if:
+ > - the glvalue is used to access the object, or
+ - it implies reading the referenced object of std::nullptr_t,
+ which is defined to be a side effect for volatile-qualified case.
+ [intro.execution]
+ > Reading an object designated by a volatile glvalue, ... are all
+ > side effects, ...
+
+commit a694c9131618fd71b65faa8022cd6210dfa760f7
+Author: Eelis van der Weegen <eelis@eelis.net>
+Date: Sun Nov 11 21:31:03 2018 +0100
+
+ [expr.static.cast] Say 'lvalue denoting ...' instead of 'lvalue to ...'
+
+commit 2e054057e5a0db3e5563dd05286b04b55c3a3b87
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Nov 21 12:02:41 2018 +0100
+
+ [basic.stc.dynamic.allocation] Fix cross-reference for get_new_handler
+
+commit d4439240b74cf044bc7626ed364eeba291ca79dd
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Oct 9 21:06:30 2018 +0200
+
+ [basic.type.qualifier] Clarify the definitions of const/volatile object
+
+commit d348800a5b0c2e594cf5e0b6e22404d52731e263
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Oct 11 09:47:10 2018 +0200
+
+ [dcl.spec.auto] Return type deduction should refer to templated entity
+
+commit 2aa12aea978a0a79b725ce7552a1803c282a1c93
+Author: Géry Ogam <gery.ogam@gmail.com>
+Date: Mon Nov 26 10:28:28 2018 +0100
+
+ [basic.lval] Correct an article in the prvalue definition
+
+ An operator can have multiple operands.
+
+commit e63542071ba4acee0adb82bd1221fdb0158a4eef
+Author: Casey Carter <Casey@Carter.net>
+Date: Sat Nov 17 16:29:38 2018 -0800
+
+ [cmp.categories,time.cal] Change "explicit constexpr" to "constexpr explicit"
+
+ Per discussion in #2371.
+
+commit e6bbbbf62cddcbc6cea43a7589cfbcc48817b74b
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Mon Nov 26 00:27:52 2018 -0800
+
+ [unord.req] Clarify what r1 is and remove unnecessary variable e.
+
+commit 38f9dccc5abe1d53e28249bd09be79a25d9b2427
+Author: Dawn Perchik <dperchik@embarcadero.com>
+Date: Fri Nov 16 02:27:56 2018 -0800
+
+ [unord.req] Use bullets for the list of denoting variables.
+
+commit e6b8936788decfb6c29ea527f1195ec3679a1195
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Mon Nov 26 00:17:04 2018 -0800
+
+ [func.def] Simplify "references to functions and references to objects"
+ to simply "references".
+
+commit dafbb9445f11ad231abbf72028c29b6dd77c9334
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Nov 19 09:44:01 2018 +0100
+
+ [func.not_fn,func.bind_front] Some clarifications
+
+ 'a target object' -> 'the target object'
+ render 'initializer' as a grammar term and add a cross-reference
+ to dcl.init
+ add cross-references to expr.call
+
+commit 40fc57e9efdf5159a981cd87c9d8d765fd3f29ae
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Sun Nov 25 23:11:27 2018 -0800
+
+ [iterators] Remove bogus "shall"s is "Expects" elements.
+
+commit 9110f52c0e9550472b55845ba1c063333a94ad17
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Sun Nov 25 21:46:09 2018 -0800
+
+ [range] [iterators] Replace uses of { I } -> Same<T>& requirement.
+
+ This form of requirement was made ill-formed by P1084R2. In its place,
+ use { I } -> Same<T&>, after discussion on the lib reflector.
+
+commit 00da6c53f744a1781a1ce23cd3026af9d87f1f8a
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Sun Nov 25 21:42:11 2018 -0800
+
+ [incrementable.traits] [readable.traits] Remove redundant remove_const_t
+ on type that cannot be const-qualified.
+
+commit e57b65067a5c73e20f2287b0ca0782d5d7d0333a
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Fri Nov 23 22:20:47 2018 -0800
+
+ [std.iterator.tags] Replace "the most specific category tag" with "a
+ category tag".
+
+ The new text was present in the Ranges wording, but with no insertion /
+ deletion markup to indicate that an edit was to be performed. However,
+ consultation with LWG revealed that this was an intentional edit missing
+ markup.
+
+commit 92326665186c9c4e29f058f5b8d0ae5ea9814465
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Nov 17 15:29:01 2018 +0100
+
+ [pairs.spec,tuple.creation] Simplify description
+
+ by inlining unwrap_ref_decay_t into its point of use.
+
+commit d9521a91ab07548e888bd5be386822c0148a111f
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Sun Nov 25 18:44:37 2018 -0800
+
+ [iostream.forward.overview] Convert incomplete wording with no normative
+ effect to an example.
+
+commit 6260a047c0f3120a0570e6418f201294e6442664
+Author: Dawn Perchik <dperchik@embarcadero.com>
+Date: Thu Nov 22 23:58:55 2018 -0800
+
+ [diff.cpp17.input.output] Add ill-formed comment and a still well-formed use.
+
+commit a0a637a0b2797b2809982836c9330052a8465172
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Sun Nov 25 01:29:58 2018 -0800
+
+ [expr.prim.req.compound] Replace note that restates what
+ 'immediately-declared constraint' means with an example.
+
+commit 27797625e16a95b8946a353b09a86544c411ce61
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Sun Nov 25 01:08:30 2018 -0800
+
+ [temp.param] Remove unused grammar production default-template-argument.
+
+commit 9b525539f0c7bf734be8e01db082fca775dbd028
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Sun Nov 25 00:52:55 2018 -0800
+
+ [dcl.type.simple] Factor out decltype(e) wording into its own subclause.
+
+commit 4cc61d46edce136f5dfaeeee671ea58039b032e2
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Fri Nov 23 19:55:37 2018 -0800
+
+ [expr.prim.req.compound] Resolve conflict between P1084R2 and P1141R2.
+
+ Replace /qualified-concept-name/ with /type-constraint/ in grammar
+ for /return-type-requirement/, and rewrite the new bullet for
+ /return-type-requirement/ added in P1084R2 to use the term
+ immediately-declared constraint introduced in P1141R2.
+
+commit d4d65994bcf692c472cee2ed83db34e4c94266e6
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Sat Nov 24 23:40:25 2018 -0800
+
+ [expr.const] Remove redundant bullet from definition of manifestly
+ constant-evaluated. Constexpr variables are always usable in constant
+ expressions.
+
+commit e201f3325d8a91319c37a702e50d8032759fd822
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Sat Nov 24 23:37:02 2018 -0800
+
+ [expr.const] Factor out some commonality from 'manifestly
+ constant-evaluated' and 'potentially constant evaluated'.
+
+commit e58439bce8af85e6569328272c2cfb73f5fc44d6
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Sat Nov 24 23:13:58 2018 -0800
+
+ [expr.const] Add missing definition of 'usable in constant expressions'
+ for (sub)objects and reference members.
+
+commit b4eec9d65bcd54430c02ac7e66c88e63360801e6
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Nov 14 23:45:01 2018 +0100
+
+ [c.mb.wcs] The parameter is called 's', not 'buf'
+
+commit f892418bf423d6495beaf75093db3dd97aff2d14
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Fri Nov 23 21:26:05 2018 -0800
+
+ [gram] Remove now-incorrect claim that a typedef-name naming a class is
+ a class-name.
+
+commit 8b70fdad014640772691057ada5b528bc8724b12
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Nov 12 03:10:20 2018 +0100
+
+ [expr,class,temp] Remove vestigious references
+
+ to pseudo-destructor-name and the removed section [expr.pseudo].
+
+ Add xrefdelta entry for removed section.
+
+commit fb22bbd60aba1f3aaf9288ab08a7feeb8e4c0101
+Author: Richard Smith <richard@metafoo.co.uk>
+Date: Fri Nov 23 19:51:28 2018 -0800
+
+ [expr.prim.req.compound] Change "is" to "has a" when refering to grammar terms.
+
+commit 9bcfe7de3dd5bd4ad429011e169fca583bfa30b0
+Author: Eelis <github.com@contacts.eelis.net>
+Date: Tue Nov 20 23:16:11 2018 +0100
+
+ [dcl.fct] Add missing period after last sentence in example. (#2494)
+
+commit 12935b8549c0412f528b33b7795a19cda7ae8dd6
+Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
+Date: Tue Nov 6 02:03:15 2018 -0500
+
+ [class.copy.assign] Use Oxford comma.
+
+ Also convert some text font spaces into tcode spaces.
+
+commit 9437d29c92b8c2e4e779acaa2677e2cbb8800414
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Nov 6 03:37:18 2018 +0100
+
+ [thread] Remove class name repeated in subheadings (#2368)
+
+commit 8ae6a8fbd5e0b19e0c2fad3598c3693b72081606
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Nov 6 03:36:58 2018 +0100
+
+ [input.output] Remove class name repeated in subheadings (#2366)
+
+commit 96028f0000bbe2709bcdefe0fe3edc24862529a7
+Author: Casey Carter <Casey@Carter.net>
+Date: Wed Oct 31 04:21:52 2018 -0700
+
+ [iterator.requirements.general] Operations satisfy requirements, not operations (#2375)
+
+ Drive-by: change "satisfy .... requirements" to "meet ... requirements".
+
+commit a43c2b30d71827325d8fdfbbd1488c570993adb7
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Fri Oct 19 15:17:52 2018 +0200
+
+ [localization] Remove class name repeated in subheadings (#2364)
+
+commit 9405969f396d371284945904b534bd3f3e029d47
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Thu Oct 18 20:39:54 2018 +0200
+
+ [numerics] Remove class name repeated in subheadings (#2362)
+
+commit 4afc80a9ab5b78cb3c1fe70495e162d40f427116
+Author: Casey Carter <Casey@Carter.net>
+Date: Wed Oct 17 02:19:26 2018 -0700
+
+ [output.iterators] Remove misleading italics from note (#2360)
+
+ Since LWG asked me to remove these from P0896's OutputIterator, they probably don't belong in Cpp17OutputIterator either.
+
+commit 853f6bfc029f4d290c8a31da14f4282ee298cdc5
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Mon Oct 15 16:10:00 2018 +0200
+
+ [iterators] Remove class name repeated in subheadings (#2358)
+
+commit 3a6d922f5ef5c3c77cfe74e39563879698716768
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Oct 13 15:07:28 2018 +0200
+
+ [re] Remove class name repeated in subheadings (#2356)
+
+commit d0bb9916b779f6b113294ce9387063cad2f4b465
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Sat Oct 13 10:45:05 2018 +0200
+
+ [utilities] Remove class name repeated in subheadings (#2355)
+
+commit 506ec70eab720e757555be0059c5371ff4117fba
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Wed Oct 10 23:35:18 2018 +0200
+
+ [class.this] Turn redundant statement on cv-qualified constructors/destructors
+ into a note.
+
+commit 7c0e7fd6396d5509027c390d9557f9642d30db42
+Author: Jonathan Wakely <cxx@kayari.org>
+Date: Wed Oct 10 15:06:10 2018 +0100
+
+ [cpp.cond] Fix "carries_depencency" typo in table
+
+commit e8fee95850cc5a68ea09fb29f4e50c28632ed348
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date: Tue Oct 9 23:24:28 2018 +0200
+
+ [basic.types] Clarify that 'value representation' does not depend on the value. (#2246)
+
diff --git a/papers/n4792.md b/papers/n4792.md
new file mode 100644
index 0000000000..381bc6c844
--- /dev/null
+++ b/papers/n4792.md
@@ -0,0 +1,939 @@
+# N4792 Editors' Report -- Programming Languages -- C++
+
+2018-12-07
+Richard Smith (editor) (Google Inc)
+Thomas Köppe (co-editor) (Google DeepMind)
+Jens Maurer (co-editor)
+Dawn Perchik (co-editor) (Bright Side Computing, LLC)
+``
+
+## Acknowledgements
+
+Special thanks to Casey Carter
+and Tim Song
+for supplying the LaTeX sources for
+[P0896R4](http://wg21.link/p0896r4) (LWG motion 25, 208 pages of wording changes)
+and
+[P1148R0](http://wg21.link/p1148r0) (LWG motion 12, 55 pages of wording changes),
+respectively,
+and to Tony Van Eerd
+for supplying a pull request for
+[P1085R2](http://wg21.link/p1085r2) (LWG motion 23).
+
+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
+
+ * [N4791](http://wg21.link/n4791) is the current working draft for C++20. It replaces [N4778](http://wg21.link/n4778).
+ * N4792 is this Editors' Report.
+
+Papers N4788 and N4789 (earlier versions of the post-San-Diego Working Draft
+and Editors' Report) are withdrawn and replaced by the above papers due to an
+administrative hiccup.
+
+## Motions incorporated into working draft
+
+### Core working group motions
+
+CWG motion 1: [Core issue resolutions](http://wg21.link/p1350r0) for 3 issues in "tentatively ready" status applied, resolving 4 issues:
+
+ * [1636](http://wg21.link/cwg1636) Bits required for negative enumerator values **superseded by CWG Motion 10**
+ * [1781](http://wg21.link/cwg1781) Converting from `nullptr_t` to `bool` in overload resolution
+ * [2133](http://wg21.link/cwg2133) Converting `std::nullptr_t` to `bool` **resolved by resolution to CWG1781**
+ * [2373](http://wg21.link/cwg2373) Incorrect handling of static member function templates in partial ordering
+
+CWG motion 2: [P0668R5 "Revising the C++ memory model"](http://wg21.link/p0668r5)
+
+CWG motion 3: [P0982R1 "Weaken release sequences"](http://wg21.link/p0982r1)
+
+CWG motion 4: [P1084R2 "Today's *return-type-requirement*s are insufficient"](http://wg21.link/p1084r2) **see below**
+
+CWG motion 5: [P1131R2 "*simple-template-id* is ambiguous between *class-name* and *type-name*"](http://wg21.link/p1131r2), resolving 1 core issue:
+
+ * [2292](http://wg21.link/cwg2292) *simple-template-id* is ambiguous between *class-name* and *type-name*
+
+CWG motion 6: [P1289R1 "Access control in contract conditions"](http://wg21.link/p1289r1)
+
+CWG motion 7 was not approved
+
+CWG motion 8: [P1002R1 "`try`-`catch` blocks in `constexpr` functions"](http://wg21.link/p1002r1)
+
+CWG motion 9: [P1327R1 "Allowing `dynamic_cast`, polymorphic `typeid` in constant expressions"](http://wg21.link/p1327r1)
+
+CWG motion 10: [P1236R1 "Signed integers are two's complement"](http://wg21.link/p1236r1) (wording for [P0907R4](http://wg21.link/p0907r4))
+
+CWG motion 11: [P0482R6 "`char8_t`: a type for UTF-8 characters and strings"](http://wg21.link/p0482r6) **see below**
+
+CWG motion 12: [P1353R0 "Missing feature test macros"](http://wg21.link/p1353r0)
+
+CWG motion 13: [P1073R3 "Immediate functions"](http://wg21.link/p1073r3)
+
+CWG motion 14: [P0595R2 "`std::is_constant_evaluated()`"](http://wg21.link/p0595r2) **see below**
+
+CWG motion 15: [P1141R2 "Yet another approach for constrained declarations"](http://wg21.link/p1141r2) **see below**
+
+CWG motion 16: [P1094R2 "Nested inline namespaces"](http://wg21.link/p1094r2)
+
+CWG motion 17: [P1330R0 "Changing the active member of a union inside `constexpr`"](http://wg21.link/p1330r0)
+
+Core motions added a total of 1 page to Clause 1-14.
+
+### Library working group motions
+
+LWG motion 1 applies to the Concurrency TS
+
+LWG motions 2 and 3 apply to the Library Fundamentals TS
+
+LWG motion 4: [Library issue resolutions](http://wg21.link/p1224r0) for 9 issues in "Ready" status and 23 issues in "Tentatively Ready" status applied:
+
+ * [2183](http://wg21.link/lwg2183) Muddled allocator requirements for `match_results` constructors
+ * [2184](http://wg21.link/lwg2184) Muddled allocator requirements for `match_results` assignments
+ * [2412](http://wg21.link/lwg2412) `promise::set_value()` and `promise::get_future()` should not race
+ * [2682](http://wg21.link/lwg2682) `filesystem::copy()` won't create a symlink to a directory
+ * [2936](http://wg21.link/lwg2936) Path comparison is defined in terms of the generic format
+ * [2943](http://wg21.link/lwg2943) Problematic specification of the wide version of `basic_filebuf::open`
+ * [2995](http://wg21.link/lwg2995) `basic_stringbuf` default constructor forbids it from using SSO capacity
+ * [2996](http://wg21.link/lwg2996) Missing rvalue overloads for `shared_ptr` operations
+ * [3008](http://wg21.link/lwg3008) `make_shared` (sub)object destruction semantics are not specified
+ * [3025](http://wg21.link/lwg3025) Map-like container deduction guides should use `pair`, not `pair`
+ * [3031](http://wg21.link/lwg3031) Algorithms and predicates with non-const reference arguments
+ * [3037](http://wg21.link/lwg3037) `polymorphic_allocator` and incomplete types
+ * [3038](http://wg21.link/lwg3038) `polymorphic_allocator::allocate` should not allow integer overflow to create vulnerabilities
+ * [3054](http://wg21.link/lwg3054) `uninitialized_copy` appears to not be able to meet its exception-safety guarantee
+ * [3065](http://wg21.link/lwg3065) [LWG 2989](http://wg21.link/lwg2989) missed that all `path`'s other operators should be hidden friends as well
+ * [3096](http://wg21.link/lwg3096) `path::lexically_relative` is confused by trailing slashes
+ * [3116](http://wg21.link/lwg3116) *OUTERMOST_ALLOC_TRAITS* needs `remove_reference_t`
+ * [3122](http://wg21.link/lwg3122) `__cpp_lib_chrono_udls` was accidentally dropped
+ * [3127](http://wg21.link/lwg3127) `basic_osyncstream::rdbuf` needs a `const_cast`
+ * [3128](http://wg21.link/lwg3128) `strstream::rdbuf` needs a `const_cast`
+ * [3129](http://wg21.link/lwg3129) `regex_token_iterator` constructor uses wrong pointer arithmetic
+ * [3130](http://wg21.link/lwg3130) [input.output] needs many `addressof`
+ * [3131](http://wg21.link/lwg3131) `addressof` all the things
+ * [3132](http://wg21.link/lwg3132) Library needs to ban macros named `expects` or `ensures`
+ * [3137](http://wg21.link/lwg3137) Header for `__cpp_lib_to_chars`
+ * [3140](http://wg21.link/lwg3140) *COMMON_REF* is unimplementable as specified
+ * [3145](http://wg21.link/lwg3145) `file_clock` breaks ABI for C++17 implementations
+ * [3147](http://wg21.link/lwg3147) Definitions of `likely` and `unlikely` are likely to cause problems
+ * [3148](http://wg21.link/lwg3148) `` should be freestanding
+ * [3153](http://wg21.link/lwg3153) `Common` and `common_type` have too little in common
+ * [3154](http://wg21.link/lwg3154) `Common` and `CommonReference` have a common defect
+ * [3160](http://wg21.link/lwg3160) `atomic_ref() = delete;` should be deleted
+
+LWG motion 5: [P1123R0 "Editorial guidance for merging P0019R8 and P0528R3"](http://wg21.link/p1123r0) (see [P0019R8](http://wg21.link/p0019r8), [P0528R3](http://wg21.link/p0528r3))
+
+LWG motion 6: [P0487R1 "Fixing `operator>>(basic_istream&, CharT*)`"](http://wg21.link/p0487r1), resolving 1 library issue:
+
+ * [2499](http://wg21.link/lwg2499) `operator>>(basic_istream&, CharT*)` makes it hard to avoid buffer overflows
+
+LWG motion 7: [P0602R4 "`variant` and `optional` should propagate copy/move triviality"](http://wg21.link/p0602r4)
+
+LWG motion 8: [P0655R1 "`visit`: explicit return type for `visit`"](http://wg21.link/p0655r1)
+
+LWG motion 9: [P0972R0 "`` `zero()`, `min()`, and `max()` should be `noexcept`"](http://wg21.link/p0972r0)
+
+LWG motion 10: [P1006R1 "`constexpr` in `std::pointer_traits`"](http://wg21.link/p1006r1)
+
+LWG motion 11: [P1032R1 "Miscellaneous `constexpr` bits"](http://wg21.link/p1032r1) **see below**
+
+LWG motion 12: [P1148R0 "Cleaning up clause 20 (strings)"](http://wg21.link/p1148r0)
+
+LWG motion 13: [P0318R1 "`unwrap_ref_decay` and `unwrap_reference`"](http://wg21.link/p0318r1) **see below**
+
+LWG motion 14: [P0357R3 "`reference_wrapper` for incomplete types"](http://wg21.link/p0357r3)
+
+LWG motion 15: [P0608R3 "A sane `variant` converting constructor"](http://wg21.link/p0608r3)
+
+LWG motion 16: [P0771R1 "`std::function` move constructor should be `noexcept`"](http://wg21.link/p0771r1)
+
+LWG motion 17: [P1007R3 "`std::assume_aligned`"](http://wg21.link/p1007r3)
+
+LWG motion 18: [P1020R1 "Smart pointer creation with default initialization"](http://wg21.link/p1020r1)
+
+LWG motion 19: [P1285R0 "Improving completeness requirements for type traits"](http://wg21.link/p1285r0)
+
+LWG motion 20: [P1248R1 "Remove `CommonReference` requirement from `StrictWeakOrdering`"](http://wg21.link/p1248r1)
+
+LWG motion 21: [P0591R4 "Utility functions to implement uses-allocator construction"](http://wg21.link/p0591r4)
+
+LWG motion 22: [P0899R1 "LWG 3016 is not a defect"](http://wg21.link/p0899r1) (see [LWG 3016](http://wg21.link/lwg3016))
+
+LWG motion 23: [P1085R2 "Should `span` be regular?"](http://wg21.link/p1085r2)
+
+LWG motion 24: [P1165R1 "Make stateful allocator propagation more consistent for `operator+(basic_string)`"](http://wg21.link/p1165r1)
+
+LWG motion 25: [P0896R4 "The One Ranges proposal"](http://wg21.link/p0896r4) **see below**
+
+LWG motion 26: [P0356R5 "Simplified partial function application"](http://wg21.link/p0356r5) **see below**
+
+LWG motion 27: [P0919R3 "Heterogeneous lookup for unordered containers"](http://wg21.link/p0919r3)
+
+LWG motion 28: [P1209R0 "Adopt consistent container erasure from Library Fundamentals 2"](http://wg21.link/p1209r0)
+
+Library motions added a total of 133 pages (and 1 Clause) to Clause 15-31.
+
+## Notable editorial changes
+
+### CWG motion 11 and CWG motion 10
+
+Rebased `char8_t` wording on the revised description of fundamental types
+introduced by CWG motion 10. The description of `unsigned char` as the
+underlying type of `char8_t` now renders unnecessary some of the other
+wording in CWG motion 11; such wording has consequently not been applied.
+
+### CWG motion 14
+
+After consulting with CWG, added the missing definition for "usable in constant
+expressions" as applied to objects and references.
+
+### CWG motion 15
+
+Removed now-unused grammar production *default-template-argument*.
+
+### CWG motion 15 and CWG motion 4
+
+CWG motion 4 adds new uses of the grammar production *qualified-concept-name*
+that CWG motion 15 removes. These have been updated to instead refer to the
+new production *type-constraint*, and the normative wording of CWG motion 4
+has been rewritten to use the new term "immediately-declared constraint",
+both of which were introduced by CWG motion 15.
+
+### LWG motion 11
+
+Change 10 included an editing instruction to make matching changes elsewhere
+in the draft. There does not appear to be any "elsewhere" to make said changes.
+This editing instruction was ignored.
+
+### LWG motion 13 and LWG motion 26
+
+The specification of `bind_front` was simplified by replacing *DECAY_UNWRAP*
+a use of the new `unwrap_ref_decay_t` alias template introduced by LWG motion 13.
+
+### LWG motion 25
+
+The wording paper contained an unmarked modification of [std.iterator.tags],
+replacing "the most specific category tag" with "a category tag".
+After consulting with the paper authors, the change was intentional, and
+the corresponding edit has been applied despite not being marked up.
+
+### LWG motion 25 and CWG motion 4
+
+CWG motion 4 removes a grammar production from *requires-clause*s, but
+LWG motion 25 adds new uses of said grammar production. Those uses are all
+of the form
+
+```
+requires {
+ { expr } -> Same&;
+}
+```
+
+After consultation with LWG, these uses have been rewritten as
+
+```
+requires {
+ { expr } -> Same;
+}
+```
+
+which is believed to both correctly reflect the intent and not change the
+meaning in practice of any of the uses introduced by LWG motion 25.
+
+Additionally, CWG motion 4 contains an instruction to replace all constructs
+of the form
+
+```
+requires {
+ E; requires Concept;
+}
+```
+
+with the simpler (but now equivalent)
+
+```
+requires {
+ { E } -> Concept;
+}
+```
+
+throughout [concepts]. However, LWG motion 25 adds many more instances of
+the former pattern throughout several other clauses. All such instances
+throughout the working draft have been replaced.
+
+### LWG motion 26
+
+A feature test macro name `__cpp_lib_bind_front` was recommended by the paper,
+but no wording changes were included to add said feature test macro to the
+working draft's table of feature test macros. The macro has been added to
+the table anyway.
+
+### Section label changes
+
+Several section labels introduced by the motions papers have been modified
+to match our style guide. In addition to the section labels affected by the
+above motions, the following changes have been made:
+
+[string.op+=] has been renamed to [string.op.append].
+[string.op+] has been renamed to [string.op.plus].
+
+[re.regex.nmswap] was the only subclause in its parent [re.regex.nonmemb].
+The former heading has been removed, leaving the old content directly in
+[re.regex.nonmemb].
+
+[istream::sentry],
+[ostream::sentry],
+[ios::failure],
+[ios::fmtflatgs],
+[ios::iostate],
+[ios::openmode],
+[ios::seekdir], and
+[ios::Init]
+have been renamed, replacing the "::" with a "."
+and converting "Init" to lowercase.
+
+See the appendix "Cross-references from ISO C++ 2017" in the working draft
+for a full list of sectoin label changes since C++17.
+
+## Minor editorial fixes
+
+A log of editorial fixes made to the working draft since N4778 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/n4778...n4791).
+
+ commit e00fef979f7c0da235351f898010658f1f074b87
+ Author: Johel Ernesto Guerrero Peña
+ Date: Thu Dec 6 21:48:24 2018 -0400
+
+ [iterator.synopsis] Add reference to [alg.req.sortable]
+
+ commit 9d81b4fde6dfe2b28737a79ed39f92ef9a0ee030
+ Author: Eelis van der Weegen
+ Date: Sun Dec 2 06:07:03 2018 +0100
+
+ [view.interface] Use "inherits"/"derives" consistently.
+
+ commit 358fcdc442fd620f00673081223e4313cf0af499
+ Author: Jens Maurer
+ Date: Tue Nov 27 20:38:28 2018 +0100
+
+ [cpp.subst] Introduce grammar non-terminal 'va-opt-replacement'
+
+ to avoid repeated quotes of the token sequence.
+
+ commit 4425a120b9a60d3c9e6aa3f1feb553082a9f1fbd
+ Author: Jens Maurer
+ Date: Fri Dec 7 21:37:02 2018 +0100
+
+ [iterator.concepts.readable] Turn parenthesized explanation into a note.
+
+ commit de1093907b6deb7455b866d5c47a6a1a026a90a1
+ Author: Jens Maurer
+ Date: Fri Dec 7 22:27:20 2018 +0100
+
+ [temp.func.order] Adjust example to rules in [temp.deduct.partial].
+
+ commit 07901a9f724b019c0b6634a9a0c39e5dd5208324
+ Author: Jens Maurer
+ Date: Sat Dec 1 17:31:53 2018 +0100
+
+ [input.output] Avoid colons in stable labels
+
+ commit 6e5dba392d19241efed299c91670cc31fcbe3826
+ Author: Thomas Köppe
+ Date: Fri Dec 7 22:05:50 2018 +0000
+
+ [template.mask.array.overview] Fix nesting of parentheses; reflow source
+
+ commit 36998eae97c6876c1f67dc0425c42555dbf0cea5
+ Author: Thomas Köppe
+ Date: Fri Dec 7 22:02:49 2018 +0000
+
+ [iterator.concept.iterator] Remove stray, mismatched parenthesis
+
+ commit a5603f0cf1b35097a9892d9627eb03dc5cc3e154
+ Author: JF Bastien
+ Date: Fri Dec 7 13:48:16 2018 -0800
+
+ [basic.fundamental] Remove a footnote that was describing a particular possible manifestation of undefined behaviour
+
+ The note was problematic, as (by omission) it suggested that such behaviour might not be true for other types.
+
+ commit 8035cdb6de85ff0f541b3fc78f747d060ea50ef6
+ Author: Johel Ernesto Guerrero Peña
+ Date: Fri Dec 7 17:43:10 2018 -0400
+
+ [iterator.traits] Present concept requirements consistently (#2566)
+
+ commit a4366dc5bf59d826a9b1aee82d317636a6239e9a
+ Author: Jens Maurer
+ Date: Fri Dec 7 21:51:55 2018 +0100
+
+ [iosfwd.syn] Change char_traits from 'class' to 'struct'. (#2570)
+
+ commit 888da0bf8d0a07048dab8098197c7a326eda9e19
+ Author: Thomas Köppe
+ Date: Wed Dec 5 01:46:53 2018 +0000
+
+ [algorithms] Add missing closing delimiters
+
+ commit 14db6ec65b7c3dbd9da2e112e09015bdcba3501f
+ Author: Eelis
+ Date: Tue Dec 4 23:01:27 2018 +0100
+
+ [atomics.types.operations]/20 Replace "E.g." at start of sentence with "For example,". (#2558)
+
+ commit aadf7684f1e6c2fe1fa15ffa0cf2ee45b5e56cd7
+ Author: Eelis
+ Date: Mon Dec 3 22:54:57 2018 +0100
+
+ [re.grammar] Add missing closing parentheses. (#2552)
+
+ commit 4fc0a426f700c03aeea5b5efe040af9f3c977df8
+ Author: Jens Maurer
+ Date: Sat Dec 1 14:32:10 2018 +0100
+
+ [utilities] Harmonize 'For T in Types' phrasing. (#2543)
+
+ No '...' for a pack expansion should appear after 'Types', and no index on 'T'.
+
+ commit 334e9f546dcb786801b9bef428f7c0fb94bee79b
+ Author: Jens Maurer
+ Date: Sat Dec 1 03:34:10 2018 +0100
+
+ [dcl.init] Clarify standard conversions for built-in types (#2534)
+
+ commit e6cd48f407698d882a08f2bc5e3aad8ea13b495e
+ Author: Jens Maurer
+ Date: Sat Dec 1 03:32:38 2018 +0100
+
+ [over.best.ics] Clarify ambiguous conversion sequence (#2532)
+
+ commit 89f5b1dfbabf0b5755f4e516a3be9b1e2b78ffc2
+ Author: Jens Maurer
+ Date: Tue Nov 27 22:01:21 2018 +0100
+
+ [over.ics.ref] Use 'implicit conversion sequence',
+
+ not 'standard conversion sequence' where applicable.
+
+ commit af1191e9f5a0ab93214849fbfed77f75b2da673b
+ Author: Jens Maurer
+ Date: Tue Nov 27 22:48:48 2018 +0100
+
+ [class.bit] Bit-fields of sufficient width can store any value of an enumeration,
+
+ not just values of enumerators.
+
+ commit 5ef7f9cbb248402f6c74f01acba87292efb0b561
+ Author: Jens Maurer
+ Date: Tue Nov 27 22:19:14 2018 +0100
+
+ [dcl.init.aggr] Resolve grammar confusion around arrays of unknown bound
+
+ commit 197db8c1fd3e57bc5c622a5e0ea9ac3f0c974e85
+ Author: Jens Maurer
+ Date: Wed Nov 28 08:04:34 2018 +0100
+
+ [dcl.inline,dcl.align] Strike redundant 'definition'
+
+ in phrases reading 'declaration or definition',
+ because a definition is also a declaration.
+
+ commit ad6385ac9730786006205d6fdca92e1d45aea13a
+ Author: Jens Maurer
+ Date: Tue Nov 27 23:16:26 2018 +0100
+
+ [dcl.spec] Harmonize phrasing of restrictions on decl-specifiers
+
+ commit f38c14be051d91bc6492d774d45a325154b7f307
+ Author: Eelis
+ Date: Tue Nov 27 23:28:09 2018 +0100
+
+ [depr.locale.category] Don't parenthesize reference after 'in'. (#2526)
+
+ commit 3ba8b56c0ffa84cf8fe7bf78234fb8694d4d1498
+ Author: Richard Smith
+ Date: Tue Nov 27 12:10:20 2018 -0800
+
+ [atomics.types.generic] Remove note that tries to encourage
+ implementations to use the same size for atomic as for T.
+
+ It's not appropriate for a note to contain "should" or implementation
+ encouragement of this kind. It's also bad advice.
+
+ commit e23cbb5b79397dd07c4c7adbea35b90075c78268
+ Author: Sergey Zubkov
+ Date: Tue Nov 27 03:11:37 2018 -0500
+
+ [allocator.uses.construction] the argument name is alloc, not allocator
+
+ commit 41a8baa9f739154f2b8c3f6b9e8339ede031195b
+ Author: Richard Smith
+ Date: Mon Nov 26 19:21:14 2018 -0800
+
+ [unord.req] Undo change accidentally made in wrong table cell.
+
+ The intended table cell was already correctly updated.
+
+ commit 9a720cd36a749057061b245772fb243678876b13
+ Author: Jens Maurer
+ Date: Thu Oct 11 20:53:10 2018 +0200
+
+ [dcl.enum] Merge duplicate normative paragraphs on redeclarations.
+
+ Also introduce the grammar non-terminal enum-head-name
+ to simplify the description.
+
+ commit 5e37f798131c38a4c609af2b8c70ce0b7a6f102f
+ Author: Jens Maurer
+ Date: Mon Apr 2 21:50:03 2018 +0200
+
+ [stmt.while] Simplify rewrite rule.
+
+ commit 84d93372e79b218701611ae8599cf885fcaf13b1
+ Author: Jens Maurer
+ Date: Mon Nov 26 12:45:01 2018 +0100
+
+ [string.classes] Avoid special characters in stable labels
+
+ and rename [string.comparison] to [string.cmp] per convention
+
+ commit 05f51e0963f8f7e9186062d97306df128ee1fdcc
+ Author: Casey Carter
+ Date: Mon Nov 26 13:06:53 2018 -0800
+
+ [iterator.operations] Simplify distance requirements; change to expects
+
+ commit 90bb6f50af1d0181a158552399739cdeaf0b6ad7
+ Author: Casey Carter
+ Date: Wed Oct 17 14:09:22 2018 -0700
+
+ [iterator.operations] Simplify advance requirements; change to expects
+
+ commit 12589ca08e44ad3c6c215998ccdd92af3c02ca3b
+ Author: Casey Carter
+ Date: Wed Oct 17 14:08:27 2018 -0700
+
+ [iterator.operations] advance does not decrement by a negative count
+
+ commit 5f757d356d241d4fa6313f7375a275a59958358d
+ Author: Jens Maurer
+ Date: Thu Oct 18 20:20:05 2018 +0200
+
+ [dcl.init.aggr] Add example for anonymous union
+
+ initialized by a designated-initializer-list.
+
+ commit b7aa3fe5f4e774edd8fe6239e707e0e0b1b44b41
+ Author: Jens Maurer
+ Date: Thu Nov 1 10:44:12 2018 +0100
+
+ [numeric.ops] Move [numerics.defns] to the point-of-use.
+
+ commit 63d15762f452fcb4787b2ca7896d9bbfde7de3ad
+ Author: Jens Maurer
+ Date: Mon Nov 26 12:36:20 2018 +0100
+
+ [alg.find.end] and [alg.search] should not use "subsequence"
+
+ commit 0f16b26b5a06b8a3cd0596ead96c54146d7e3178
+ Author: Casey Carter
+ Date: Wed Nov 7 14:16:30 2018 -0800
+
+ [over.ics.user] Mark "user-defined conversion sequence" as a term of art
+
+ commit 7e32ffd6c031771bb3a7568eb40ebe3d6b3417aa
+ Author: Jens Maurer
+ Date: Thu Nov 15 19:42:52 2018 +0100
+
+ [over.best.ics] Turn 'such as' list into a note
+
+ commit 915c784c12ec4570974a67e98d0086e1933d0733
+ Author: Jens Maurer
+ Date: Mon Nov 26 23:42:17 2018 +0100
+
+ [iterators] Shorten labels for iterator concepts
+
+ commit 3768294e5bac0fac1b40aee14c8615f6c3d2f08c
+ Author: Jens Maurer
+ Date: Mon Nov 26 23:35:13 2018 +0100
+
+ [iterators] Shorten stable labels for algorithm requirements
+
+ commit fc0c0db579234fba09f87ee3fa7053f699066c2f
+ Author: Jens Maurer
+ Date: Mon Nov 26 11:59:42 2018 +0100
+
+ [ranges] Shorten and adjust stable labels
+
+ commit fb5d52d59d6823d0e03b2e7ca85d76f43402efa8
+ Author: Jens Maurer
+ Date: Mon Nov 26 13:22:09 2018 +0100
+
+ [structure.summary] Add missing templated entities
+
+ commit 944a64419594b455759168e089c5cd075ea848be
+ Author: Jens Maurer
+ Date: Mon Nov 26 13:33:33 2018 +0100
+
+ [func.bind_front] Use unwrap_ref_decay_t
+
+ commit 12c55fcdff724855444d3e3ddfcc24ad93d9dd6a
+ Author: Jens Maurer
+ Date: Mon Nov 26 13:54:46 2018 +0100
+
+ [dcl.attr.contract.check] Remove redundant statement that violation handler is implementation-defined
+
+ commit ae11d65ac5df8a7e605f07bc1d36ed584002fd15
+ Author: Jens Maurer
+ Date: Mon Nov 26 14:01:32 2018 +0100
+
+ [expr] Fix cross-references for 'composite pointer type'
+
+ to refer to [expr.type], not [expr.prop].
+
+ commit 42f956e7e80a4dfd81608b366e4f7813332d7dc0
+ Author: Jens Maurer
+ Date: Mon Nov 26 18:31:42 2018 +0100
+
+ [temp] Use 'deduced as' instead of 'deduced to'
+
+ in comments explaining examples
+
+ commit 602a81d2d88ec98fef3d4feeaf5b24079e1e2110
+ Author: S. B. Tam
+ Date: Fri Oct 12 17:35:23 2018 +0800
+
+ [class.mem] Add opaque-enum-declaration to member-declaration
+
+ commit 8ddcba4252b4a45194b8fdf4ebd2a439cb5e5147
+ Author: Kazutoshi SATODA
+ Date: Tue Oct 30 08:58:23 2018 +0900
+
+ [conv.lval] Improve a bit more the note about std::nullptr_t case
+
+ - "read the object" -> "access the object"
+ The "read" was derived from the rule at [intro.execution], but it
+ didn't fit well here.
+ - "the object" -> "the object to which the glvalue refers"
+ Make it clear what "the object" refers to.
+
+ https://github.com/cplusplus/draft/pull/2372#pullrequestreview-169248002
+
+ commit 0b35a4688d09a385488f0d23c296afa622d7b02e
+ Author: Kazutoshi SATODA
+ Date: Thu Oct 25 02:59:31 2018 +0900
+
+ [conv.lval] Improve the note about std::nullptr_t case
+
+ The meaning of "fetched from memory" is vague, and the two uses of term
+ "access" [defns.access] are inappropreate here because
+ - it causes undefined behavior to access an inactive member of a
+ union, based on the rule of out-of-lifetime object [basic.life]:
+ > The program has undefined behavior if:
+ > - the glvalue is used to access the object, or
+ - it implies reading the referenced object of std::nullptr_t,
+ which is defined to be a side effect for volatile-qualified case.
+ [intro.execution]
+ > Reading an object designated by a volatile glvalue, ... are all
+ > side effects, ...
+
+ commit a694c9131618fd71b65faa8022cd6210dfa760f7
+ Author: Eelis van der Weegen
+ Date: Sun Nov 11 21:31:03 2018 +0100
+
+ [expr.static.cast] Say 'lvalue denoting ...' instead of 'lvalue to ...'
+
+ commit 2e054057e5a0db3e5563dd05286b04b55c3a3b87
+ Author: Jens Maurer
+ Date: Wed Nov 21 12:02:41 2018 +0100
+
+ [basic.stc.dynamic.allocation] Fix cross-reference for get_new_handler
+
+ commit d4439240b74cf044bc7626ed364eeba291ca79dd
+ Author: Jens Maurer
+ Date: Tue Oct 9 21:06:30 2018 +0200
+
+ [basic.type.qualifier] Clarify the definitions of const/volatile object
+
+ commit d348800a5b0c2e594cf5e0b6e22404d52731e263
+ Author: Jens Maurer
+ Date: Thu Oct 11 09:47:10 2018 +0200
+
+ [dcl.spec.auto] Return type deduction should refer to templated entity
+
+ commit 2aa12aea978a0a79b725ce7552a1803c282a1c93
+ Author: Géry Ogam
+ Date: Mon Nov 26 10:28:28 2018 +0100
+
+ [basic.lval] Correct an article in the prvalue definition
+
+ An operator can have multiple operands.
+
+ commit e63542071ba4acee0adb82bd1221fdb0158a4eef
+ Author: Casey Carter
+ Date: Sat Nov 17 16:29:38 2018 -0800
+
+ [cmp.categories,time.cal] Change "explicit constexpr" to "constexpr explicit"
+
+ Per discussion in #2371.
+
+ commit e6bbbbf62cddcbc6cea43a7589cfbcc48817b74b
+ Author: Richard Smith
+ Date: Mon Nov 26 00:27:52 2018 -0800
+
+ [unord.req] Clarify what r1 is and remove unnecessary variable e.
+
+ commit 38f9dccc5abe1d53e28249bd09be79a25d9b2427
+ Author: Dawn Perchik
+ Date: Fri Nov 16 02:27:56 2018 -0800
+
+ [unord.req] Use bullets for the list of denoting variables.
+
+ commit e6b8936788decfb6c29ea527f1195ec3679a1195
+ Author: Richard Smith
+ Date: Mon Nov 26 00:17:04 2018 -0800
+
+ [func.def] Simplify "references to functions and references to objects"
+ to simply "references".
+
+ commit dafbb9445f11ad231abbf72028c29b6dd77c9334
+ Author: Jens Maurer
+ Date: Mon Nov 19 09:44:01 2018 +0100
+
+ [func.not_fn,func.bind_front] Some clarifications
+
+ 'a target object' -> 'the target object'
+ render 'initializer' as a grammar term and add a cross-reference
+ to dcl.init
+ add cross-references to expr.call
+
+ commit 40fc57e9efdf5159a981cd87c9d8d765fd3f29ae
+ Author: Richard Smith
+ Date: Sun Nov 25 23:11:27 2018 -0800
+
+ [iterators] Remove bogus "shall"s is "Expects" elements.
+
+ commit 9110f52c0e9550472b55845ba1c063333a94ad17
+ Author: Richard Smith
+ Date: Sun Nov 25 21:46:09 2018 -0800
+
+ [range] [iterators] Replace uses of { I } -> Same& requirement.
+
+ This form of requirement was made ill-formed by P1084R2. In its place,
+ use { I } -> Same, after discussion on the lib reflector.
+
+ commit 00da6c53f744a1781a1ce23cd3026af9d87f1f8a
+ Author: Richard Smith
+ Date: Sun Nov 25 21:42:11 2018 -0800
+
+ [incrementable.traits] [readable.traits] Remove redundant remove_const_t
+ on type that cannot be const-qualified.
+
+ commit e57b65067a5c73e20f2287b0ca0782d5d7d0333a
+ Author: Richard Smith
+ Date: Fri Nov 23 22:20:47 2018 -0800
+
+ [std.iterator.tags] Replace "the most specific category tag" with "a
+ category tag".
+
+ The new text was present in the Ranges wording, but with no insertion /
+ deletion markup to indicate that an edit was to be performed. However,
+ consultation with LWG revealed that this was an intentional edit missing
+ markup.
+
+ commit 92326665186c9c4e29f058f5b8d0ae5ea9814465
+ Author: Jens Maurer
+ Date: Sat Nov 17 15:29:01 2018 +0100
+
+ [pairs.spec,tuple.creation] Simplify description
+
+ by inlining unwrap_ref_decay_t into its point of use.
+
+ commit d9521a91ab07548e888bd5be386822c0148a111f
+ Author: Richard Smith
+ Date: Sun Nov 25 18:44:37 2018 -0800
+
+ [iostream.forward.overview] Convert incomplete wording with no normative
+ effect to an example.
+
+ commit 6260a047c0f3120a0570e6418f201294e6442664
+ Author: Dawn Perchik
+ Date: Thu Nov 22 23:58:55 2018 -0800
+
+ [diff.cpp17.input.output] Add ill-formed comment and a still well-formed use.
+
+ commit a0a637a0b2797b2809982836c9330052a8465172
+ Author: Richard Smith
+ Date: Sun Nov 25 01:29:58 2018 -0800
+
+ [expr.prim.req.compound] Replace note that restates what
+ 'immediately-declared constraint' means with an example.
+
+ commit 27797625e16a95b8946a353b09a86544c411ce61
+ Author: Richard Smith
+ Date: Sun Nov 25 01:08:30 2018 -0800
+
+ [temp.param] Remove unused grammar production default-template-argument.
+
+ commit 9b525539f0c7bf734be8e01db082fca775dbd028
+ Author: Richard Smith
+ Date: Sun Nov 25 00:52:55 2018 -0800
+
+ [dcl.type.simple] Factor out decltype(e) wording into its own subclause.
+
+ commit 4cc61d46edce136f5dfaeeee671ea58039b032e2
+ Author: Richard Smith
+ Date: Fri Nov 23 19:55:37 2018 -0800
+
+ [expr.prim.req.compound] Resolve conflict between P1084R2 and P1141R2.
+
+ Replace /qualified-concept-name/ with /type-constraint/ in grammar
+ for /return-type-requirement/, and rewrite the new bullet for
+ /return-type-requirement/ added in P1084R2 to use the term
+ immediately-declared constraint introduced in P1141R2.
+
+ commit d4d65994bcf692c472cee2ed83db34e4c94266e6
+ Author: Richard Smith
+ Date: Sat Nov 24 23:40:25 2018 -0800
+
+ [expr.const] Remove redundant bullet from definition of manifestly
+ constant-evaluated. Constexpr variables are always usable in constant
+ expressions.
+
+ commit e201f3325d8a91319c37a702e50d8032759fd822
+ Author: Richard Smith
+ Date: Sat Nov 24 23:37:02 2018 -0800
+
+ [expr.const] Factor out some commonality from 'manifestly
+ constant-evaluated' and 'potentially constant evaluated'.
+
+ commit e58439bce8af85e6569328272c2cfb73f5fc44d6
+ Author: Richard Smith
+ Date: Sat Nov 24 23:13:58 2018 -0800
+
+ [expr.const] Add missing definition of 'usable in constant expressions'
+ for (sub)objects and reference members.
+
+ commit b4eec9d65bcd54430c02ac7e66c88e63360801e6
+ Author: Jens Maurer
+ Date: Wed Nov 14 23:45:01 2018 +0100
+
+ [c.mb.wcs] The parameter is called 's', not 'buf'
+
+ commit f892418bf423d6495beaf75093db3dd97aff2d14
+ Author: Richard Smith
+ Date: Fri Nov 23 21:26:05 2018 -0800
+
+ [gram] Remove now-incorrect claim that a typedef-name naming a class is
+ a class-name.
+
+ commit 8b70fdad014640772691057ada5b528bc8724b12
+ Author: Jens Maurer
+ Date: Mon Nov 12 03:10:20 2018 +0100
+
+ [expr,class,temp] Remove vestigious references
+
+ to pseudo-destructor-name and the removed section [expr.pseudo].
+
+ Add xrefdelta entry for removed section.
+
+ commit fb22bbd60aba1f3aaf9288ab08a7feeb8e4c0101
+ Author: Richard Smith
+ Date: Fri Nov 23 19:51:28 2018 -0800
+
+ [expr.prim.req.compound] Change "is" to "has a" when refering to grammar terms.
+
+ commit 9bcfe7de3dd5bd4ad429011e169fca583bfa30b0
+ Author: Eelis
+ Date: Tue Nov 20 23:16:11 2018 +0100
+
+ [dcl.fct] Add missing period after last sentence in example. (#2494)
+
+ commit 12935b8549c0412f528b33b7795a19cda7ae8dd6
+ Author: Arthur O'Dwyer
+ Date: Tue Nov 6 02:03:15 2018 -0500
+
+ [class.copy.assign] Use Oxford comma.
+
+ Also convert some text font spaces into tcode spaces.
+
+ commit 9437d29c92b8c2e4e779acaa2677e2cbb8800414
+ Author: Jens Maurer
+ Date: Tue Nov 6 03:37:18 2018 +0100
+
+ [thread] Remove class name repeated in subheadings (#2368)
+
+ commit 8ae6a8fbd5e0b19e0c2fad3598c3693b72081606
+ Author: Jens Maurer
+ Date: Tue Nov 6 03:36:58 2018 +0100
+
+ [input.output] Remove class name repeated in subheadings (#2366)
+
+ commit 96028f0000bbe2709bcdefe0fe3edc24862529a7
+ Author: Casey Carter
+ Date: Wed Oct 31 04:21:52 2018 -0700
+
+ [iterator.requirements.general] Operations satisfy requirements, not operations (#2375)
+
+ Drive-by: change "satisfy .... requirements" to "meet ... requirements".
+
+ commit a43c2b30d71827325d8fdfbbd1488c570993adb7
+ Author: Jens Maurer
+ Date: Fri Oct 19 15:17:52 2018 +0200
+
+ [localization] Remove class name repeated in subheadings (#2364)
+
+ commit 9405969f396d371284945904b534bd3f3e029d47
+ Author: Jens Maurer
+ Date: Thu Oct 18 20:39:54 2018 +0200
+
+ [numerics] Remove class name repeated in subheadings (#2362)
+
+ commit 4afc80a9ab5b78cb3c1fe70495e162d40f427116
+ Author: Casey Carter
+ Date: Wed Oct 17 02:19:26 2018 -0700
+
+ [output.iterators] Remove misleading italics from note (#2360)
+
+ Since LWG asked me to remove these from P0896's OutputIterator, they probably don't belong in Cpp17OutputIterator either.
+
+ commit 853f6bfc029f4d290c8a31da14f4282ee298cdc5
+ Author: Jens Maurer
+ Date: Mon Oct 15 16:10:00 2018 +0200
+
+ [iterators] Remove class name repeated in subheadings (#2358)
+
+ commit 3a6d922f5ef5c3c77cfe74e39563879698716768
+ Author: Jens Maurer
+ Date: Sat Oct 13 15:07:28 2018 +0200
+
+ [re] Remove class name repeated in subheadings (#2356)
+
+ commit d0bb9916b779f6b113294ce9387063cad2f4b465
+ Author: Jens Maurer
+ Date: Sat Oct 13 10:45:05 2018 +0200
+
+ [utilities] Remove class name repeated in subheadings (#2355)
+
+ commit 506ec70eab720e757555be0059c5371ff4117fba
+ Author: Jens Maurer
+ Date: Wed Oct 10 23:35:18 2018 +0200
+
+ [class.this] Turn redundant statement on cv-qualified constructors/destructors
+ into a note.
+
+ commit 7c0e7fd6396d5509027c390d9557f9642d30db42
+ Author: Jonathan Wakely
+ Date: Wed Oct 10 15:06:10 2018 +0100
+
+ [cpp.cond] Fix "carries_depencency" typo in table
+
+ commit e8fee95850cc5a68ea09fb29f4e50c28632ed348
+ Author: Jens Maurer
+ Date: Tue Oct 9 23:24:28 2018 +0200
+
+ [basic.types] Clarify that 'value representation' does not depend on the value. (#2246)
diff --git a/source/algorithms.tex b/source/algorithms.tex
index 4bf758ba93..db62bcc009 100644
--- a/source/algorithms.tex
+++ b/source/algorithms.tex
@@ -30,13 +30,38 @@
Because of this, they can work with program-defined data structures, as long
as these data structures have iterator types satisfying the assumptions on the algorithms.
+\pnum
+The entities defined in the \tcode{std::ranges} namespace
+in this Clause are not found by argument-dependent
+name lookup\iref{basic.lookup.argdep}. When found by
+unqualified\iref{basic.lookup.unqual} name lookup for the
+\grammarterm{postfix-expression} in a function call\iref{expr.call}, they
+inhibit argument-dependent name lookup.
+
+\begin{example}
+\begin{codeblock}
+void foo() {
+ using namespace std::ranges;
+ std::vector vec{1,2,3};
+ find(begin(vec), end(vec), 2); // \#1
+}
+\end{codeblock}
+The function call expression at \tcode{\#1} invokes \tcode{std::ranges::find},
+not \tcode{std::find}, despite that (a) the iterator type returned from \tcode{begin(vec)}
+and \tcode{end(vec)} may be associated with namespace \tcode{std} and (b)
+\tcode{std::find} is more specialized~(\ref{temp.func.order}) than
+\tcode{std::ranges::find} since the former requires its first two parameters to
+have the same type.
+\end{example}
+
\pnum
For purposes of determining the existence of data races, algorithms shall
not modify objects referenced through an iterator argument unless the
specification requires such modification.
\pnum
-Throughout this Clause, the names of template parameters
+Throughout this Clause, where the template parameters are not constrained,
+the names of template parameters
are used to express type requirements.
\begin{itemize}
\item
@@ -95,7 +120,9 @@
\tcode{OutputIterator1},
or
\tcode{OutputIterator2},
-because output iterators must always be mutable.
+because output iterators must always be mutable, nor does it affect
+arguments that are constrained, for which mutability requirements are expressed
+explicitly.
\end{note}
\pnum
@@ -110,7 +137,7 @@
suffix \tcode{_if} (which follows the suffix \tcode{_copy}).
\pnum
-The
+When not otherwise constrained, the
\tcode{Predicate}
parameter is used whenever an algorithm expects a function object\iref{function.objects}
that, when applied to the result
@@ -120,16 +147,20 @@
takes
\tcode{Predicate pred}
as its argument and \tcode{first}
-as its iterator argument, it should work correctly in the
-construct
+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 function object
\tcode{pred}
shall not apply any non-constant
function through the dereferenced iterator.
+Given a glvalue \tcode{u} of type (possibly \tcode{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)}.
\pnum
-The
+When not otherwise constrained, the
\tcode{BinaryPredicate}
parameter is used whenever an algorithm expects a function object that when applied to
the result of dereferencing two corresponding iterators or to dereferencing an
@@ -142,9 +173,10 @@
In other words, if an algorithm takes
\tcode{BinaryPredicate binary_pred}
as its argument and \tcode{first1} and \tcode{first2} as
-its iterator arguments, it should work correctly in
-the construct
+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}.
+Unless otherwise specified,
\tcode{BinaryPredicate}
always takes the first
iterator's \tcode{value_type}
@@ -155,6 +187,19 @@
construct \tcode{binary_pred(*first1, value)} contextually converted to \tcode{bool}\iref{conv}.
\tcode{binary_pred} shall not
apply any non-constant function through the dereferenced iterators.
+Given a glvalue \tcode{u} of type (possibly \tcode{const}) \tcode{T1} that
+designates the same object as \tcode{*first1}, and
+a glvalue \tcode{v} of type (possibly \tcode{const}) \tcode{T2} that
+designates the same object as
+\tcode{*first2},
+\tcode{binary_pred(u, *first2)},
+\tcode{binary_pred(*first1, v)}, and
+\tcode{binary_pred(u, v)}
+shall each be a valid expression that is equal to
+\tcode{binary_pred(*first1, *first2)}, and
+\tcode{binary_pred(u, value)}
+shall be a valid expression that is equal to
+\tcode{binary_pred(*first1, value)}.
\pnum
The parameters
@@ -180,29 +225,63 @@
either \tcode{true} or \tcode{false} in boolean contexts.
\pnum
-In the description of the algorithms operators
-\tcode{+}
-and
-\tcode{-}
-are used for some of the iterator categories for which
-they do not have to be defined.
+In the description of the algorithms, operator \tcode{+}
+is used for some of the iterator categories for which
+it does not have to be defined.
In these cases the semantics of
-\tcode{a+n}
-is the same as that of
-
+\tcode{a + n}
+are the same as those of
\begin{codeblock}
-X tmp = a;
-advance(tmp, n);
+auto tmp = a;
+for (; n < 0; ++n) --tmp;
+for (; n > 0; --n) ++tmp;
return tmp;
\end{codeblock}
-
-and that of
-\tcode{b-a}
-is the same as of
-
+Similarly, operator \tcode{-} is used for some
+combinations of iterators and sentinel types for which
+it does not have to be defined. If \range{a}{b} denotes a range,
+the semantics of \tcode{b - a} in these cases are the same as those of
\begin{codeblock}
-return distance(a, b);
+iter_difference_t> n = 0;
+for (auto tmp = a; tmp != b; ++tmp) ++n;
+return n;
\end{codeblock}
+and if \range{b}{a} denotes a range, the same as those of
+\begin{codeblock}
+iter_difference_t> n = 0;
+for (auto tmp = b; tmp != a; ++tmp) --n;
+return n;
+\end{codeblock}
+
+\pnum
+In the description of algorithm return values, a sentinel value \tcode{s}
+denoting the end of a range \range{i}{s} is sometimes
+returned where an iterator is expected. In these cases, the semantics are as
+if the sentinel is converted into an iterator using
+\tcode{ranges::next(i, s)}.
+
+\pnum
+Overloads of algorithms that take \libconcept{Range} arguments\iref{range.range}
+behave as if they are implemented by calling \tcode{ranges::begin} and
+\tcode{ranges::end} on the \libconcept{Range}(s) and dispatching
+to the overload in namespace \tcode{ranges} that takes
+separate iterator and sentinel arguments.
+
+\pnum
+The number and order of deducible template parameters for algorithm declarations
+are unspecified, except where explicitly stated otherwise.
+\begin{note}
+Consequently, the algorithms may not be called with
+explicitly-specified template argument lists.
+\end{note}
+
+\pnum
+The class templates \tcode{binary_transform_result},
+\tcode{for_each_result}, \tcode{minmax_result}, \tcode{mismatch_result},
+\tcode{copy_result}, and
+\tcode{partition_copy_result} have the template parameters, data members, and
+special members specified above. They have no base classes or members other than
+those specified.
\rSec1[algorithms.parallel]{Parallel algorithms}
@@ -496,6 +575,15 @@
bool all_of(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, ForwardIterator last, Predicate pred);
+ namespace ranges {
+ template S, class Proj = identity,
+ IndirectUnaryPredicate> Pred>
+ constexpr bool all_of(I first, S last, Pred pred, Proj proj = {});
+ template, Proj>> Pred>
+ constexpr bool all_of(R&& r, Pred pred, Proj proj = {});
+ }
+
// \ref{alg.any_of}, any of
template
constexpr bool any_of(InputIterator first, InputIterator last, Predicate pred);
@@ -503,6 +591,15 @@
bool any_of(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, ForwardIterator last, Predicate pred);
+ namespace ranges {
+ template S, class Proj = identity,
+ IndirectUnaryPredicate> Pred>
+ constexpr bool any_of(I first, S last, Pred pred, Proj proj = {});
+ template, Proj>> Pred>
+ constexpr bool any_of(R&& r, Pred pred, Proj proj = {});
+ }
+
// \ref{alg.none_of}, none of
template
constexpr bool none_of(InputIterator first, InputIterator last, Predicate pred);
@@ -510,12 +607,39 @@
bool none_of(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, ForwardIterator last, Predicate pred);
+ namespace ranges {
+ template S, class Proj = identity,
+ IndirectUnaryPredicate> Pred>
+ constexpr bool none_of(I first, S last, Pred pred, Proj proj = {});
+ template, Proj>> Pred>
+ constexpr bool none_of(R&& r, Pred pred, Proj proj = {});
+ }
+
// \ref{alg.foreach}, for each
template
constexpr Function for_each(InputIterator first, InputIterator last, Function f);
template
void for_each(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, ForwardIterator last, Function f);
+
+ namespace ranges {
+ template
+ struct for_each_result {
+ I in;
+ F fun;
+ };
+
+ template S, class Proj = identity,
+ IndirectUnaryInvocable> Fun>
+ constexpr for_each_result
+ for_each(I first, S last, Fun f, Proj proj = {});
+ template, Proj>> Fun>
+ constexpr for_each_result, Fun>
+ for_each(R&& r, Fun f, Proj proj = {});
+ }
+
template
constexpr InputIterator for_each_n(InputIterator first, Size n, Function f);
template
@@ -545,6 +669,30 @@
ForwardIterator first, ForwardIterator last,
Predicate pred);
+ namespace ranges {
+ template S, class T, class Proj = identity>
+ requires IndirectRelation, projected, const T*>
+ constexpr I find(I first, S last, const T& value, Proj proj = {});
+ template
+ requires IndirectRelation, projected, Proj>, const T*>
+ constexpr safe_iterator_t
+ find(R&& r, const T& value, Proj proj = {});
+ template S, class Proj = identity,
+ IndirectUnaryPredicate> Pred>
+ constexpr I find_if(I first, S last, Pred pred, Proj proj = {});
+ template, Proj>> Pred>
+ constexpr safe_iterator_t
+ find_if(R&& r, Pred pred, Proj proj = {});
+ template S, class Proj = identity,
+ IndirectUnaryPredicate> Pred>
+ constexpr I find_if_not(I first, S last, Pred pred, Proj proj = {});
+ template, Proj>> Pred>
+ constexpr safe_iterator_t
+ find_if_not(R&& r, Pred pred, Proj proj = {});
+ }
+
// \ref{alg.find.end}, find end
template
constexpr ForwardIterator1
@@ -568,6 +716,21 @@
ForwardIterator2 first2, ForwardIterator2 last2,
BinaryPredicate pred);
+ namespace ranges {
+ template S1, ForwardIterator I2, Sentinel S2,
+ class Pred = ranges::equal_to<>, class Proj1 = identity, class Proj2 = identity>
+ requires IndirectlyComparable
+ constexpr subrange
+ find_end(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {},
+ Proj1 proj1 = {}, Proj2 proj2 = {});
+ template, class Proj1 = identity, class Proj2 = identity>
+ requires IndirectlyComparable, iterator_t, Pred, Proj1, Proj2>
+ constexpr safe_subrange_t
+ find_end(R1&& r1, R2&& r2, Pred pred = {},
+ Proj1 proj1 = {}, Proj2 proj2 = {});
+ }
+
// \ref{alg.find.first.of}, find first
template
constexpr InputIterator
@@ -591,6 +754,23 @@
ForwardIterator2 first2, ForwardIterator2 last2,
BinaryPredicate pred);
+ namespace ranges {
+ template S1, ForwardIterator I2, Sentinel S2,
+ class Proj1 = identity, class Proj2 = identity,
+ IndirectRelation,
+ projected> Pred = ranges::equal_to<>>
+ constexpr I1 find_first_of(I1 first1, S1 last1, I2 first2, S2 last2,
+ Pred pred = {},
+ Proj1 proj1 = {}, Proj2 proj2 = {});
+ template, Proj1>,
+ projected, Proj2>> Pred = ranges::equal_to<>>
+ constexpr safe_iterator_t
+ find_first_of(R1&& r1, R2&& r2,
+ Pred pred = {},
+ Proj1 proj1 = {}, Proj2 proj2 = {});
+ }
+
// \ref{alg.adjacent.find}, adjacent find
template
constexpr ForwardIterator
@@ -609,6 +789,17 @@
ForwardIterator first, ForwardIterator last,
BinaryPredicate pred);
+ namespace ranges {
+ template S, class Proj = identity,
+ IndirectRelation> Pred = ranges::equal_to<>>
+ constexpr I adjacent_find(I first, S last, Pred pred = {},
+ Proj proj = {});
+ template, Proj>> Pred = ranges::equal_to<>>
+ constexpr safe_iterator_t
+ adjacent_find(R&& r, Pred pred = {}, Proj proj = {});
+ }
+
// \ref{alg.count}, count
template
constexpr typename iterator_traits::difference_type
@@ -625,6 +816,25 @@
count_if(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator first, ForwardIterator last, Predicate pred);
+ namespace ranges {
+ template S, class T, class Proj = identity>
+ requires IndirectRelation, projected, const T*>
+ constexpr iter_difference_t
+ count(I first, S last, const T& value, Proj proj = {});
+ template
+ requires IndirectRelation, projected, Proj>, const T*>
+ constexpr iter_difference_t>
+ count(R&& r, const T& value, Proj proj = {});
+ template S, class Proj = identity,
+ IndirectUnaryPredicate> Pred>
+ constexpr iter_difference_t
+ count_if(I first, S last, Pred pred, Proj proj = {});
+ template, Proj>> Pred>
+ constexpr iter_difference_t>
+ count_if(R&& r, Pred pred, Proj proj = {});
+ }
+
// \ref{mismatch}, mismatch
template
constexpr pair
@@ -667,6 +877,29 @@
ForwardIterator2 first2, ForwardIterator2 last2,
BinaryPredicate pred);
+ namespace ranges {
+ template
+ struct mismatch_result {
+ I1 in1;
+ I2 in2;
+ };
+
+ template S1, InputIterator I2, Sentinel S2,
+ class Proj1 = identity, class Proj2 = identity,
+ IndirectRelation,
+ projected> Pred = ranges::equal_to<>>
+ constexpr mismatch_result
+ mismatch(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {},
+ Proj1 proj1 = {}, Proj2 proj2 = {});
+ template, Proj1>,
+ projected, Proj2>> Pred = ranges::equal_to<>>
+ constexpr mismatch_result, safe_iterator_t>
+ mismatch(R1&& r1, R2&& r2, Pred pred = {},
+ Proj1 proj1 = {}, Proj2 proj2 = {});
+ }
+
// \ref{alg.equal}, equal
template
constexpr bool equal(InputIterator1 first1, InputIterator1 last1,
@@ -701,6 +934,20 @@
ForwardIterator2 first2, ForwardIterator2 last2,
BinaryPredicate pred);
+ namespace ranges {
+ template S1, InputIterator I2, Sentinel S2,
+ class Pred = ranges::equal_to<>, class Proj1 = identity, class Proj2 = identity>
+ requires IndirectlyComparable
+ constexpr bool equal(I1 first1, S1 last1, I2 first2, S2 last2,
+ Pred pred = {},
+ Proj1 proj1 = {}, Proj2 proj2 = {});
+ template,
+ class Proj1 = identity, class Proj2 = identity>
+ requires IndirectlyComparable, iterator_t, Pred, Proj1, Proj2>
+ constexpr bool equal(R1&& r1, R2&& r2, Pred pred = {},
+ Proj1 proj1 = {}, Proj2 proj2 = {});
+ }
+
// \ref{alg.is_permutation}, is permutation
template
constexpr bool is_permutation(ForwardIterator1 first1, ForwardIterator1 last1,
@@ -716,6 +963,21 @@
ForwardIterator2 first2, ForwardIterator2 last2,
BinaryPredicate pred);
+ namespace ranges {
+ template S1, ForwardIterator I2,
+ Sentinel S2, class Pred = ranges::equal_to<>, class Proj1 = identity,
+ class Proj2 = identity>
+ requires IndirectlyComparable
+ constexpr bool is_permutation(I1 first1, S1 last1, I2 first2, S2 last2,
+ Pred pred = {},
+ Proj1 proj1 = {}, Proj2 proj2 = {});
+ template,
+ class Proj1 = identity, class Proj2 = identity>
+ requires IndirectlyComparable, iterator_t, Pred, Proj1, Proj2>
+ constexpr bool is_permutation(R1&& r1, R2&& r2, Pred pred = {},
+ Proj1 proj1 = {}, Proj2 proj2 = {});
+ }
+
// \ref{alg.search}, search
template
constexpr ForwardIterator1
@@ -738,6 +1000,23 @@
ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator2 last2,
BinaryPredicate pred);
+
+ namespace ranges {
+ template S1, ForwardIterator I2,
+ Sentinel S2, class Pred = ranges::equal_to<>,
+ class Proj1 = identity, class Proj2 = identity>
+ requires IndirectlyComparable
+ constexpr subrange
+ search(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {},
+ Proj1 proj1 = {}, Proj2 proj2 = {});
+ template,
+ class Proj1 = identity, class Proj2 = identity>
+ requires IndirectlyComparable, iterator_t, Pred, Proj1, Proj2>
+ constexpr safe_subrange_t
+ search(R1&& r1, R2&& r2, Pred pred = {},
+ Proj1 proj1 = {}, Proj2 proj2 = {});
+ }
+
template
constexpr ForwardIterator
search_n(ForwardIterator first, ForwardIterator last,
@@ -760,6 +1039,21 @@
Size count, const T& value,
BinaryPredicate pred);
+ namespace ranges {
+ template S, class T,
+ class Pred = ranges::equal_to<>, class Proj = identity>
+ requires IndirectlyComparable
+ constexpr subrange
+ search_n(I first, S last, iter_difference_t count,
+ const T& value, Pred pred = {}, Proj proj = {});
+ template,
+ class Proj = identity>
+ requires IndirectlyComparable, const T*, Pred, Proj>
+ constexpr safe_subrange_t
+ search_n(R&& r, iter_difference_t> count,
+ const T& value, Pred pred = {}, Proj proj = {});
+ }
+
template
constexpr ForwardIterator
search(ForwardIterator first, ForwardIterator last, const Searcher& searcher);
@@ -773,6 +1067,24 @@
ForwardIterator2 copy(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result);
+
+ namespace ranges {
+ template
+ struct copy_result {
+ I in;
+ O out;
+ };
+
+ template S, WeaklyIncrementable O>
+ requires IndirectlyCopyable
+ constexpr copy_result
+ copy(I first, S last, O result);
+ template
+ requires IndirectlyCopyable, O>
+ constexpr copy_result, O>
+ copy(R&& r, O result);
+ }
+
template
constexpr OutputIterator copy_n(InputIterator first, Size n,
OutputIterator result);
@@ -781,6 +1093,17 @@
ForwardIterator2 copy_n(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator1 first, Size n,
ForwardIterator2 result);
+
+ namespace ranges {
+ template
+ using copy_n_result = copy_result;
+
+ template
+ requires IndirectlyCopyable
+ constexpr copy_n_result
+ copy_n(I first, iter_difference_t n, O result);
+ }
+
template
constexpr OutputIterator copy_if(InputIterator first, InputIterator last,
OutputIterator result, Predicate pred);
@@ -789,11 +1112,42 @@
ForwardIterator2 copy_if(ExecutionPolicy&& exec, // see \ref{algorithms.parallel.overloads}
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, Predicate pred);
+
+ namespace ranges {
+ template
+ using copy_if_result = copy_result;
+
+ template S, WeaklyIncrementable O, class Proj = identity,
+ IndirectUnaryPredicate> Pred>
+ requires IndirectlyCopyable
+ constexpr copy_if_result
+ copy_if(I first, S last, O result, Pred pred, Proj proj = {});
+ template, Proj>> Pred>
+ requires IndirectlyCopyable, O>
+ constexpr copy_if_result, O>
+ copy_if(R&& r, O result, Pred pred, Proj proj = {});
+ }
+
template
constexpr BidirectionalIterator2
copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last,
BidirectionalIterator2 result);
+ namespace ranges {
+ template
+ using copy_backward_result = copy_result;
+
+ template S1, BidirectionalIterator I2>
+ requires IndirectlyCopyable
+ constexpr copy_backward_result