From 41bdca1efd88034ab7a5f7f7750c6adc8ee6c83b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Sun, 19 Mar 2023 00:46:56 +0000 Subject: [PATCH 01/48] Update configuration for building working drafts after N4944. --- source/config.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/config.tex b/source/config.tex index a7e44b8931..9e2197d124 100644 --- a/source/config.tex +++ b/source/config.tex @@ -1,8 +1,8 @@ %!TEX root = std.tex %%-------------------------------------------------- %% Version numbers -\newcommand{\docno}{N4944} -\newcommand{\prevdocno}{N4928} +\newcommand{\docno}{Dxxxx} +\newcommand{\prevdocno}{N4944} \newcommand{\cppver}{202002L} %% Release date From b8512a1c292adee71c1145d3c61e32d48dcb8daa Mon Sep 17 00:00:00 2001 From: morinmorin Date: Wed, 15 Mar 2023 01:45:28 +0900 Subject: [PATCH 02/48] [container.requirements.general] Move exposition-only concept The exposition-only concept container-compatible-range is defined in the subclause for allocator-aware containers, that does not actually use it. This requirement is used throughout the subclause for a variety of contains, so relocate the definition into the leading subclause that provides a key to definitions used throughout the containers subclauses. --- source/containers.tex | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/containers.tex b/source/containers.tex index 0cd3b6ce60..fdcfc6da17 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -95,6 +95,14 @@ \tcode{rv} denotes a non-const rvalue of type \tcode{X}. \end{itemize} +\pnum +The following exposition-only concept is used in the definition of containers: +\begin{codeblock} +template +concept @\defexposconcept{container-compatible-range}@ = // \expos + ranges::@\libconcept{input_range}@ && @\libconcept{convertible_to}@, T>; +\end{codeblock} + \rSec3[container.reqmts]{Containers} % Local command to index names as members of all containers. @@ -951,14 +959,6 @@ but specialized allocators can choose a different definition. \end{note} -\pnum -The following exposition-only concept is used in the definition of containers: -\begin{codeblock} -template -concept @\defexposconcept{container-compatible-range}@ = // \expos - ranges::@\libconcept{input_range}@ && @\libconcept{convertible_to}@, T>; -\end{codeblock} - \pnum In this subclause, \begin{itemize} From 6e7fd98b684a92405934de981abf01414a67ddbd Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 23 Mar 2023 14:21:22 +0000 Subject: [PATCH 03/48] [version.syn] bump value of __cpp_lib_allocate_at_least This is requested for the Tentatively Ready LWG issue 3887. Fixes #6202 --- source/support.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/support.tex b/source/support.tex index 1d23489e88..13b3dc132b 100644 --- a/source/support.tex +++ b/source/support.tex @@ -553,7 +553,7 @@ #define @\defnlibxname{cpp_lib_addressof_constexpr}@ 201603L // also in \libheader{memory} #define @\defnlibxname{cpp_lib_algorithm_iterator_requirements}@ 202207L // also in \libheader{algorithm}, \libheader{numeric}, \libheader{memory} -#define @\defnlibxname{cpp_lib_allocate_at_least}@ 202106L // also in \libheader{memory} +#define @\defnlibxname{cpp_lib_allocate_at_least}@ 202302L // also in \libheader{memory} #define @\defnlibxname{cpp_lib_allocator_traits_is_always_equal}@ 201411L // also in \libheader{memory}, \libheader{scoped_allocator}, \libheader{string}, \libheader{deque}, \libheader{forward_list}, \libheader{list}, \libheader{vector}, // \libheader{map}, \libheader{set}, \libheader{unordered_map}, \libheader{unordered_set} From 6c039939693c2e5c22a75ed5a8468e717867a7fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Thu, 23 Mar 2023 23:39:45 +0000 Subject: [PATCH 04/48] [papers] Fix date in N4945 --- papers/n4945.html | 2 +- papers/n4945.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/papers/n4945.html b/papers/n4945.html index e8335900cf..7ead1e9a9d 100644 --- a/papers/n4945.html +++ b/papers/n4945.html @@ -136,7 +136,7 @@

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

-

Date: 2022-03-22

+

Date: 2023-03-22

Thomas Köppe (editor, Google DeepMind)
Jens Maurer (co-editor)
diff --git a/papers/n4945.md b/papers/n4945.md index fd012dadb6..2be432983d 100644 --- a/papers/n4945.md +++ b/papers/n4945.md @@ -1,6 +1,6 @@ # N4945 Editors' Report -- Programming Languages -- C++ -Date: 2022-03-22 +Date: 2023-03-22 Thomas Köppe (editor, Google DeepMind) Jens Maurer (co-editor) From a0403a9407e6520b6bbf0e818d9db8ac1282f4e1 Mon Sep 17 00:00:00 2001 From: lprv <100177227+lprv@users.noreply.github.com> Date: Sat, 11 Mar 2023 20:40:30 +0000 Subject: [PATCH 05/48] [module.interface] Fix outdated example --- source/modules.tex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/modules.tex b/source/modules.tex index f38503d39e..78825dd401 100644 --- a/source/modules.tex +++ b/source/modules.tex @@ -382,9 +382,10 @@ \begin{example} \begin{codeblock} export module M; +int g; export namespace N { int x; // OK - static_assert(1 == 1); // error: does not declare a name + using ::g; // error: \tcode{::g} has module linkage } \end{codeblock} \end{example} From 2c7e87d447d65684c74890074999c60bb45712ab Mon Sep 17 00:00:00 2001 From: Christian Trott Date: Fri, 24 Mar 2023 09:32:22 -0700 Subject: [PATCH 06/48] [mdspan.layout.left.cons] extents() should be other.extents() (#6069) The precondition was erroneously referring to the not yet constructed extents instead of other.extents(). Note that the extents of the to be constructed layout will be initialized with other.extents - i.e. after construction they will return the same value for the fwd-prod-of-extents etc. --- source/containers.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/containers.tex b/source/containers.tex index fdcfc6da17..e6cfb82591 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -19442,7 +19442,7 @@ If \tcode{extents_type::rank() > 0} is \tcode{true}, then for all $r$ in the range $[0, \tcode{extents_type::rank()})$, \tcode{other.stride($r$)} equals -\tcode{extents().\exposid{fwd-prod-of-extents}($r$)}, and +\tcode{other.extents().\exposid{fwd-prod-of-extents}($r$)}, and \item \tcode{other.required_span_size()} is representable as a value of type \tcode{index_type}\iref{basic.fundamental}. @@ -19700,7 +19700,7 @@ If \tcode{extents_type::rank() > 0} is \tcode{true}, then for all $r$ in the range $[0, \tcode{extents_type::rank()})$, \tcode{other.stride($r$)} equals -\tcode{extents().\exposid{rev-prod-of-extents}($r$)}. +\tcode{other.extents().\exposid{rev-prod-of-extents}($r$)}. \item \tcode{other.required_span_size()} is representable as a value of type \tcode{index_type}\iref{basic.fundamental}. From 1b0fe66324f2d5e7861397d7f537243833418cde Mon Sep 17 00:00:00 2001 From: Jakub Mazurkiewicz Date: Fri, 24 Mar 2023 17:33:09 +0100 Subject: [PATCH 07/48] [range.cartesian.view] Add missing views:: qualifier (#6059) --- source/ranges.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/ranges.tex b/source/ranges.tex index 03c4ea1eaf..8de263c0c4 100644 --- a/source/ranges.tex +++ b/source/ranges.tex @@ -15045,7 +15045,7 @@ }; template - cartesian_product_view(Vs&&...) -> cartesian_product_view...>; + cartesian_product_view(Vs&&...) -> cartesian_product_view...>; } \end{codeblock} From 562af663363337848bcb34a8f5ba37641fb0560e Mon Sep 17 00:00:00 2001 From: Alisdair Meredith Date: Mon, 27 Mar 2023 17:06:50 -0400 Subject: [PATCH 08/48] [over.literal] Cross-reference deprecated grammar (#6209) The core convention is to retain deprecated wording in the core clauses, but always make a reference to Annex D where a feature, or parts of a feature, are deprecated. --- source/overloading.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/overloading.tex b/source/overloading.tex index b9f47ea50b..d0698b19ea 100644 --- a/source/overloading.tex +++ b/source/overloading.tex @@ -3954,7 +3954,7 @@ The \grammarterm{ud-suffix} of the \grammarterm{user-defined-string-literal} or the \grammarterm{identifier} in a \grammarterm{literal-operator-id} is called a \defnx{literal suffix identifier}{literal!suffix identifier}. -The first form of \grammarterm{literal-operator-id} is deprecated. +The first form of \grammarterm{literal-operator-id} is deprecated\iref{depr.lit}. Some literal suffix identifiers are reserved for future standardization; see~\ref{usrlit.suffix}. A declaration whose \grammarterm{literal-operator-id} uses such a literal suffix identifier is ill-formed, no diagnostic required. From ac47f9cb768760f0abd7a57cbf3074ad5eebf011 Mon Sep 17 00:00:00 2001 From: Alisdair Meredith Date: Mon, 27 Mar 2023 17:09:44 -0400 Subject: [PATCH 09/48] [container.reqmts] Move requirements to the right place (#6199) As part of the replacement of the container requirements tables with text, several paragraphs of general container requirements were buried in the new subsections for more specific requirements such as reversible containers or allocator-aware containers. This seems to have happened when general container requirements followed one of the container requirements tables that are now expressed as text. This change carefully restores text to the general container requirements clause, in the original order they appeared in C++20. --- source/containers.tex | 136 +++++++++++++++++++++--------------------- 1 file changed, 69 insertions(+), 67 deletions(-) diff --git a/source/containers.tex b/source/containers.tex index e6cfb82591..698973ff63 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -636,6 +636,57 @@ with value \tcode{a.end()} before the swap will have value \tcode{b.end()} after the swap. +\pnum +Unless otherwise specified (see~\ref{associative.reqmts.except}, \ref{unord.req.except}, \ref{deque.modifiers}, and +\ref{vector.modifiers}) +all container types defined in this Clause meet +the following additional requirements: + +\begin{itemize} +\item +If an exception is thrown by an +\tcode{insert()} or \tcode{emplace()} +function while inserting a single element, that +function has no effects. +\item +If an exception is thrown by a +\tcode{push_back()}, +\tcode{push_front()}, +\tcode{emplace_back()}, or \tcode{emplace_front()} +function, that function has no effects. +\item +No +\tcode{erase()}, +\tcode{clear()}, +\tcode{pop_back()} +or +\tcode{pop_front()} +function throws an exception. +\item +No copy constructor or assignment operator of a returned iterator +throws an exception. +\item +No +\tcode{swap()} +function throws an exception. +\item +No +\tcode{swap()} +function invalidates any references, +pointers, or iterators referring to the elements +of the containers being swapped. +\begin{note} +The \tcode{end()} iterator does not refer to any element, so it can be invalidated. +\end{note} +\end{itemize} + +\pnum +Unless otherwise specified (either explicitly or by defining a +function in terms of other functions), invoking a container member +function or passing a container as an argument to a library function +shall not invalidate iterators to, or change the values of, objects +within that container. + \pnum A \defnadj{contiguous}{container} is a container @@ -644,6 +695,24 @@ \oldconcept{RandomAccessIterator} requirements\iref{random.access.iterators} and model \libconcept{contiguous_iterator}\iref{iterator.concept.contiguous}. +\pnum +The behavior of certain container member functions and deduction guides +depends on whether types qualify as input iterators or allocators. +The extent to which an implementation determines that a type cannot be an input +iterator is unspecified, except that as a minimum integral types shall not qualify +as input iterators. +Likewise, the extent to which an implementation determines that a type cannot be +an allocator is unspecified, except that as a minimum a type \tcode{A} shall not qualify +as an allocator unless it meets both of the following conditions: + +\begin{itemize} +\item The \grammarterm{qualified-id} \tcode{A::value_type} +is valid and denotes a type\iref{temp.deduct}. + +\item The expression \tcode{declval().allocate(size_t\{\})} +is well-formed when treated as an unevaluated operand. +\end{itemize} + \rSec3[container.rev.reqmts]{Reversible container requirements} % Local command to index names as members of all containers. @@ -774,56 +843,6 @@ Constant. \end{itemdescr} -\pnum -Unless otherwise specified (see~\ref{associative.reqmts.except}, \ref{unord.req.except}, \ref{deque.modifiers}, and -\ref{vector.modifiers}) -all container types defined in this Clause meet -the following additional requirements: - -\begin{itemize} -\item -If an exception is thrown by an -\tcode{insert()} or \tcode{emplace()} -function while inserting a single element, that -function has no effects. -\item -If an exception is thrown by a -\tcode{push_back()}, -\tcode{push_front()}, -\tcode{emplace_back()}, or \tcode{emplace_front()} -function, that function has no effects. -\item -No -\tcode{erase()}, -\tcode{clear()}, -\tcode{pop_back()} -or -\tcode{pop_front()} -function throws an exception. -\item -No copy constructor or assignment operator of a returned iterator -throws an exception. -\item -No -\tcode{swap()} -function throws an exception. -\item -No -\tcode{swap()} -function invalidates any references, -pointers, or iterators referring to the elements -of the containers being swapped. -\begin{note} -The \tcode{end()} iterator does not refer to any element, so it can be invalidated. -\end{note} -\end{itemize} - -\pnum -Unless otherwise specified (either explicitly or by defining a -function in terms of other functions), invoking a container member -function or passing a container as an argument to a library function -shall not invalidate iterators to, or change the values of, objects -within that container. \rSec3[container.opt.reqmts]{Optional container requirements} @@ -1192,23 +1211,6 @@ Constant. \end{itemdescr} -\pnum -The behavior of certain container member functions and deduction guides -depends on whether types qualify as input iterators or allocators. -The extent to which an implementation determines that a type cannot be an input -iterator is unspecified, except that as a minimum integral types shall not qualify -as input iterators. -Likewise, the extent to which an implementation determines that a type cannot be -an allocator is unspecified, except that as a minimum a type \tcode{A} shall not qualify -as an allocator unless it meets both of the following conditions: - -\begin{itemize} -\item The \grammarterm{qualified-id} \tcode{A::value_type} -is valid and denotes a type\iref{temp.deduct}. - -\item The expression \tcode{declval().allocate(size_t\{\})} -is well-formed when treated as an unevaluated operand. -\end{itemize} \rSec2[container.requirements.dataraces]{Container data races} From bb65fc8e22b8e056cfbeb45ba65c6f37bf355182 Mon Sep 17 00:00:00 2001 From: Jens Maurer Date: Tue, 28 Mar 2023 21:04:20 +0200 Subject: [PATCH 10/48] [dcl.decl.general] Fix cross-references "templated function" is defined in [temp.pre], but avoid having two cross-references to the same place in the same paragraph by dropping the cross-reference for the definition of the grammar non-terminal "requires-clause". --- source/declarations.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/declarations.tex b/source/declarations.tex index e2e6054442..0b07338299 100644 --- a/source/declarations.tex +++ b/source/declarations.tex @@ -2165,10 +2165,10 @@ \end{note} \pnum -The optional \grammarterm{requires-clause}\iref{temp.pre} in an +The optional \grammarterm{requires-clause} in an \grammarterm{init-declarator} or \grammarterm{member-declarator} shall be present only if the declarator declares a -templated function\iref{dcl.fct}. +templated function\iref{temp.pre}. % \indextext{trailing requires-clause@trailing \gterm{requires-clause}|see{\gterm{requires-clause}, trailing}}% When present after a declarator, the \grammarterm{requires-clause} From 42d17131099e0f8f9437750eeeca2c1653bd77ac Mon Sep 17 00:00:00 2001 From: Alisdair Meredith Date: Tue, 28 Mar 2023 16:26:32 -0400 Subject: [PATCH 11/48] [depr.atomics.volatile] Use \tcode for template name "atomic" (#6213) --- source/future.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/future.tex b/source/future.tex index f417b2b506..3b75e30c7e 100644 --- a/source/future.tex +++ b/source/future.tex @@ -2697,7 +2697,7 @@ \rSec2[depr.atomics.volatile]{Volatile access} \pnum -If an atomic specialization has one of the following overloads, +If an \tcode{atomic}\iref{atomics.types.generic} specialization has one of the following overloads, then that overload participates in overload resolution even if \tcode{atomic::is_always_lock_free} is \tcode{false}: \begin{codeblock} From 8c99598b60f0a059b37c7e1fd82480aaf32169a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Wed, 29 Mar 2023 10:47:27 +0100 Subject: [PATCH 12/48] [class.member.lookup] Also change "N" to "M" in note. This change should have been part of the resolution of CWG2642 (via CWG Motion 1), but was accidentally omitted there. --- source/basic.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/basic.tex b/source/basic.tex index 0b6b3f78d0..6fdda854a6 100644 --- a/source/basic.tex +++ b/source/basic.tex @@ -1618,7 +1618,7 @@ which shall not be an invalid set, are included in the result. \begin{note} Overload resolution will discard those -that cannot convert to the type specified by $N$\iref{temp.over}. +that cannot convert to the type specified by $M$\iref{temp.over}. \end{note} \pnum From 8e2d6ee92f372d9526c01a8fb601da9921c94b2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Wed, 29 Mar 2023 16:08:57 +0100 Subject: [PATCH 13/48] [stacktrace.format] Use full typename "basic_stacktrace". --- source/diagnostics.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/diagnostics.tex b/source/diagnostics.tex index a7ec160262..be48fa0244 100644 --- a/source/diagnostics.tex +++ b/source/diagnostics.tex @@ -2438,7 +2438,7 @@ \fmtgrammarterm{format-spec} is empty. \pnum -A \tcode{basic_stacktrace} object \tcode{s} is formatted as if by +A \tcode{basic_stacktrace} object \tcode{s} is formatted as if by copying \tcode{to_string(s)} through the output iterator of the context. \end{itemdescr} From 063a8abdfe2a3e29d5c90270b22ba3d145aad38e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Wed, 29 Mar 2023 16:26:18 +0100 Subject: [PATCH 14/48] [format.string.std] Fix broken markup (missing backslash) --- source/utilities.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/utilities.tex b/source/utilities.tex index 6bd360c47f..63ce3611d9 100644 --- a/source/utilities.tex +++ b/source/utilities.tex @@ -14859,7 +14859,7 @@ \end{ncbnf} \pnum -Field widths are specified in defnadj{field width}{units}; +Field widths are specified in \defnadj{field width}{units}; the number of column positions required to display a sequence of characters in a terminal. The \defnadj{minimum}{field width} From 70b2f7b6bf0d7fe3d87d9438459f766fdd83b08c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Wed, 29 Mar 2023 17:31:24 +0100 Subject: [PATCH 15/48] [indirectcallable.indirectinvocable] Remove stray "&". This was an error in the application of P2609R3. --- source/iterators.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/iterators.tex b/source/iterators.tex index 3b404f8c70..a6519affcc 100644 --- a/source/iterators.tex +++ b/source/iterators.tex @@ -2483,7 +2483,7 @@ @\libconcept{copy_constructible}@ && @\libconcept{equivalence_relation}@, @\exposid{indirect-value-t}@> && @\libconcept{equivalence_relation}@, iter_reference_t> && - @\libconcept{equivalence_relation}@, @\exposid{indirect-value-t}@&> && + @\libconcept{equivalence_relation}@, @\exposid{indirect-value-t}@> && @\libconcept{equivalence_relation}@, iter_reference_t> && @\libconcept{equivalence_relation}@, iter_common_reference_t>; From 24d7340146caa11227304b18ed57822f1bd53627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Wed, 29 Mar 2023 17:42:40 +0100 Subject: [PATCH 16/48] [indirectcallable.indirectinvocable] Align code, no italic correction --- source/iterators.tex | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/source/iterators.tex b/source/iterators.tex index a6519affcc..901fa971d3 100644 --- a/source/iterators.tex +++ b/source/iterators.tex @@ -2441,29 +2441,29 @@ concept @\deflibconcept{indirectly_unary_invocable}@ = @\libconcept{indirectly_readable}@ && @\libconcept{copy_constructible}@ && - @\libconcept{invocable}@> && + @\libconcept{invocable}@> && @\libconcept{invocable}@> && @\libconcept{invocable}@> && @\libconcept{common_reference_with}@< - invoke_result_t>, + invoke_result_t>, invoke_result_t>>; template concept @\deflibconcept{indirectly_regular_unary_invocable}@ = @\libconcept{indirectly_readable}@ && @\libconcept{copy_constructible}@ && - @\libconcept{regular_invocable}@> && + @\libconcept{regular_invocable}@> && @\libconcept{regular_invocable}@> && @\libconcept{regular_invocable}@> && @\libconcept{common_reference_with}@< - invoke_result_t>, + invoke_result_t>, invoke_result_t>>; template concept @\deflibconcept{indirect_unary_predicate}@ = @\libconcept{indirectly_readable}@ && @\libconcept{copy_constructible}@ && - @\libconcept{predicate}@> && + @\libconcept{predicate}@> && @\libconcept{predicate}@> && @\libconcept{predicate}@>; @@ -2471,9 +2471,9 @@ concept @\deflibconcept{indirect_binary_predicate}@ = @\libconcept{indirectly_readable}@ && @\libconcept{indirectly_readable}@ && @\libconcept{copy_constructible}@ && - @\libconcept{predicate}@, @\exposid{indirect-value-t}@> && - @\libconcept{predicate}@, iter_reference_t> && - @\libconcept{predicate}@, @\exposid{indirect-value-t}@> && + @\libconcept{predicate}@, @\exposidnc{indirect-value-t}@> && + @\libconcept{predicate}@, iter_reference_t> && + @\libconcept{predicate}@, @\exposidnc{indirect-value-t}@> && @\libconcept{predicate}@, iter_reference_t> && @\libconcept{predicate}@, iter_common_reference_t>; @@ -2481,9 +2481,9 @@ concept @\deflibconcept{indirect_equivalence_relation}@ = @\libconcept{indirectly_readable}@ && @\libconcept{indirectly_readable}@ && @\libconcept{copy_constructible}@ && - @\libconcept{equivalence_relation}@, @\exposid{indirect-value-t}@> && - @\libconcept{equivalence_relation}@, iter_reference_t> && - @\libconcept{equivalence_relation}@, @\exposid{indirect-value-t}@> && + @\libconcept{equivalence_relation}@, @\exposidnc{indirect-value-t}@> && + @\libconcept{equivalence_relation}@, iter_reference_t> && + @\libconcept{equivalence_relation}@, @\exposidnc{indirect-value-t}@> && @\libconcept{equivalence_relation}@, iter_reference_t> && @\libconcept{equivalence_relation}@, iter_common_reference_t>; @@ -2491,9 +2491,9 @@ concept @\deflibconcept{indirect_strict_weak_order}@ = @\libconcept{indirectly_readable}@ && @\libconcept{indirectly_readable}@ && @\libconcept{copy_constructible}@ && - @\libconcept{strict_weak_order}@, @\exposid{indirect-value-t}@> && - @\libconcept{strict_weak_order}@, iter_reference_t> && - @\libconcept{strict_weak_order}@, @\exposid{indirect-value-t}@> && + @\libconcept{strict_weak_order}@, @\exposidnc{indirect-value-t}@> && + @\libconcept{strict_weak_order}@, iter_reference_t> && + @\libconcept{strict_weak_order}@, @\exposidnc{indirect-value-t}@> && @\libconcept{strict_weak_order}@, iter_reference_t> && @\libconcept{strict_weak_order}@, iter_common_reference_t>; } From 08581e85636794384029de729a641975bb13260c Mon Sep 17 00:00:00 2001 From: Arthur O'Dwyer Date: Sun, 16 Apr 2023 05:18:24 -0400 Subject: [PATCH 17/48] [alg.unique] fix typo: namepace -> namespace --- source/algorithms.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/algorithms.tex b/source/algorithms.tex index ad8add5227..ed1d8d1cf0 100644 --- a/source/algorithms.tex +++ b/source/algorithms.tex @@ -5934,7 +5934,7 @@ \pnum \expects -For the overloads in namepace \tcode{std}, +For the overloads in namespace \tcode{std}, \tcode{pred} is an equivalence relation and the type of \tcode{*first} meets the \oldconcept{MoveAssignable} requirements (\tref{cpp17.moveassignable}). From 1a2e97de0517bb9ee1715a9664fa2861fa025cda Mon Sep 17 00:00:00 2001 From: Hewill Kang <67143766+hewillk@users.noreply.github.com> Date: Mon, 17 Apr 2023 14:31:05 +0800 Subject: [PATCH 18/48] [range.repeat.iterator] Remove redundant period (#6234) --- source/ranges.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/ranges.tex b/source/ranges.tex index 8de263c0c4..45b27682eb 100644 --- a/source/ranges.tex +++ b/source/ranges.tex @@ -3763,7 +3763,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.\exposid{current_} == y.\exposid{current_};}. +Equivalent to: \tcode{return x.\exposid{current_} == y.\exposid{current_};} \end{itemdescr} \indexlibrarymember{operator<=>}{repeat_view::\exposid{iterator}}% @@ -3774,7 +3774,7 @@ \begin{itemdescr} \pnum \effects -Equivalent to: \tcode{return x.\exposid{current_} <=> y.\exposid{current_};}. +Equivalent to: \tcode{return x.\exposid{current_} <=> y.\exposid{current_};} \end{itemdescr} \indexlibrarymember{operator+}{repeat_view::\exposid{iterator}}% From 44ff7aa92ba7f716abe96c29876b2ea145a22c66 Mon Sep 17 00:00:00 2001 From: Mohammed Keyvanzadeh Date: Fri, 21 Apr 2023 18:56:31 +0330 Subject: [PATCH 19/48] [check.yml] update version of "upload" action (#6231) Update the `actions/upload-artifact` action to version 3. --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index de1ebdac1e..a2dcca1077 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -68,7 +68,7 @@ jobs: - name: upload PDF if: matrix.cfg.os == 'ubuntu-22.04' - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: draft-snapshot path: source/std.pdf From 707da557a9377d0723df363e2fcac6babc9ce5b0 Mon Sep 17 00:00:00 2001 From: Hewill Kang <67143766+hewillk@users.noreply.github.com> Date: Fri, 14 Apr 2023 00:13:51 +0800 Subject: [PATCH 20/48] [range.enumerate.view] make the format more consistent --- source/ranges.tex | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/source/ranges.tex b/source/ranges.tex index 45b27682eb..ad59ed3fa5 100644 --- a/source/ranges.tex +++ b/source/ranges.tex @@ -9544,11 +9544,9 @@ return @\exposid{sentinel}@(ranges::end(@\exposid{base_}@)); } - constexpr auto size() - requires @\libconcept{sized_range}@ + constexpr auto size() requires @\libconcept{sized_range}@ { return ranges::size(@\exposid{base_}@); } - constexpr auto size() const - requires @\libconcept{sized_range}@ + constexpr auto size() const requires @\libconcept{sized_range}@ { return ranges::size(@\exposid{base_}@); } constexpr V base() const & requires @\libconcept{copy_constructible}@ { return @\exposid{base_}@; } From bec08a7af7bf96e5c5d880009927595b978e9f70 Mon Sep 17 00:00:00 2001 From: Kilian Henneberger Date: Fri, 21 Apr 2023 22:00:51 +0200 Subject: [PATCH 21/48] [format.syn] Add range_format to index --- source/utilities.tex | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/utilities.tex b/source/utilities.tex index 63ce3611d9..cf2826fe3f 100644 --- a/source/utilities.tex +++ b/source/utilities.tex @@ -14610,13 +14610,13 @@ // \ref{format.range}, formatting of ranges // \ref{format.range.fmtkind}, variable template \tcode{format_kind} - enum class range_format { - disabled, - map, - set, - sequence, - string, - debug_string + enum class @\libglobal{range_format}@ { + @\libmember{disabled}{range_format}@, + @\libmember{map}{range_format}@, + @\libmember{set}{range_format}@, + @\libmember{sequence}{range_format}@, + @\libmember{string}{range_format}@, + @\libmember{debug_string}{range_format}@ }; template From 413b147b0f48ea87606e0b7fbc107c8316b98fc3 Mon Sep 17 00:00:00 2001 From: Detlef Riekenberg Date: Thu, 27 Apr 2023 04:00:32 +0200 Subject: [PATCH 22/48] [compliance, headers.cpp.fs] Fix subclause name for cstddef (#6227) --- source/lib-intro.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/lib-intro.tex b/source/lib-intro.tex index e64f55a063..f5039472b1 100644 --- a/source/lib-intro.tex +++ b/source/lib-intro.tex @@ -1439,7 +1439,7 @@ include at least the headers shown in \tref{headers.cpp.fs}. \begin{libsumtab}{\Cpp{} headers for freestanding implementations}{headers.cpp.fs} -\ref{support.types} & Types & \tcode{} \\ \rowsep +\ref{support.types} & Common definitions & \tcode{} \\ \rowsep \ref{support.limits} & Implementation properties & \tcode{}, \tcode{}, \tcode{}, \tcode{} \\ \rowsep \ref{cstdint.syn} & Integer types & \tcode{} \\ \rowsep From 82ecf4355a016847ffcf778abfcf1fe96d02fc79 Mon Sep 17 00:00:00 2001 From: Arthur O'Dwyer Date: Sun, 30 Apr 2023 07:56:10 -0400 Subject: [PATCH 23/48] [flat.map.modifiers] Fix erroneous "try_emplace_hint" (#6238) The hint-taking operation is instead an overload of try_emplace. --- source/containers.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/containers.tex b/source/containers.tex index 698973ff63..7cd5bba11f 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -15623,7 +15623,7 @@ \end{codeblock} for the first two overloads or \begin{codeblock} -try_emplace_hint(hint, std::forward(k), std::forward(obj)) +try_emplace(hint, std::forward(k), std::forward(obj)) \end{codeblock} for the last two overloads. @@ -15674,11 +15674,11 @@ assigns \tcode{std::forward<\linebreak M>(obj)} to \tcode{e.second}. Otherwise, equivalent to \begin{codeblock} -try_emplace(std::forward(k), std::forward(obj)) +try_emplace(std::forward(k), std::forward(obj)) \end{codeblock} for the first overload or \begin{codeblock} -try_emplace_hint(hint, std::forward(k), std::forward(obj)) +try_emplace(hint, std::forward(k), std::forward(obj)) \end{codeblock} for the second overload. From 9568c66abd12eadd696b9f16bb4884908e2aad66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Kr=C3=BCgler?= Date: Sun, 30 Apr 2023 13:57:23 +0200 Subject: [PATCH 24/48] [ranges] Remove "inline" from variable templates (#6218) --- source/ranges.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/ranges.tex b/source/ranges.tex index ad59ed3fa5..b7054b977a 100644 --- a/source/ranges.tex +++ b/source/ranges.tex @@ -474,7 +474,7 @@ namespace views { template - inline constexpr @\unspecnc@ adjacent = @\unspecnc@; // freestanding + constexpr @\unspecnc@ adjacent = @\unspecnc@; // freestanding inline constexpr auto @\libmember{pairwise}{views}@ = adjacent<2>; // freestanding } @@ -485,7 +485,7 @@ namespace views { template - inline constexpr @\unspecnc@ adjacent_transform = @\unspecnc@; // freestanding + constexpr @\unspecnc@ adjacent_transform = @\unspecnc@; // freestanding inline constexpr auto @\libmember{pairwise_transform}{views}@ = adjacent_transform<2>; // freestanding } @@ -1584,7 +1584,7 @@ \begin{itemdecl} template - inline constexpr bool @\exposidnc{is-initializer-list}@ = @\seebelow@; // \expos + constexpr bool @\exposidnc{is-initializer-list}@ = @\seebelow@; // \expos \end{itemdecl} \begin{itemdescr} From bdd25a63a8a84a1183ebc125dac132d0572f67fd Mon Sep 17 00:00:00 2001 From: Alisdair Meredith Date: Sun, 30 Apr 2023 08:02:42 -0400 Subject: [PATCH 25/48] [iterator.concept.winc] Improve implementation-defined text (#6228) --- source/iterators.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/iterators.tex b/source/iterators.tex index 901fa971d3..d4f5e240ae 100644 --- a/source/iterators.tex +++ b/source/iterators.tex @@ -1390,7 +1390,7 @@ \pnum A type \tcode{I} is an \defnadj{integer-class}{type} -if it is in a set of \impldef{integer-class type} types +if it is in a set of \impldef{set of integer-class types} types that behave as integer types do, as defined below. \begin{note} An integer-class type is not necessarily a class type. From 057da6c79e35cc4cdebaa5a6096738f273c6c2e8 Mon Sep 17 00:00:00 2001 From: tocic Date: Wed, 28 Sep 2022 13:14:14 +0300 Subject: [PATCH 26/48] [back, macros] Fix inconsistent hyphenation of "cross-reference" --- source/back.tex | 4 ++-- source/macros.tex | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/back.tex b/source/back.tex index 0ebe82f03b..055fb32146 100644 --- a/source/back.tex +++ b/source/back.tex @@ -45,7 +45,7 @@ \chapter{Bibliography} \renewcommand{\glossitem}[4]{\hangpara{4em}{1}\realglossitem{#1}{#2}{#3}{#4}} \clearpage -\renewcommand{\glossaryname}{Cross references} +\renewcommand{\glossaryname}{Cross-references} \renewcommand{\preglossaryhook}{Each clause and subclause label is listed below along with the corresponding clause or subclause number and page number, in alphabetical order by label.\\} \twocolglossary @@ -57,7 +57,7 @@ \chapter{Bibliography} \clearpage \input{xrefdelta} -\renewcommand{\glossaryname}{Cross references from ISO \CppXX{}} +\renewcommand{\glossaryname}{Cross-references from ISO \CppXX{}} \renewcommand{\preglossaryhook}{All clause and subclause labels from ISO \CppXX{} (ISO/IEC 14882:2020, \doccite{Programming Languages --- \Cpp{}}) are present in this document, with the exceptions described below.\\} diff --git a/source/macros.tex b/source/macros.tex index a615cfabb0..64b85f0b77 100644 --- a/source/macros.tex +++ b/source/macros.tex @@ -61,7 +61,7 @@ \def\stopindexescape#1\doneindexescape{} %%-------------------------------------------------- -%% Cross references. +%% Cross-references. %%-------------------------------------------------- \newcommand{\addxref}[1]{% \glossary[xrefindex]{\indexescape{#1}}{(\ref{\indexescape{#1}})}% @@ -358,7 +358,7 @@ \newcommand{\ctype}{\Fundesc{Type}} \newcommand{\templalias}{\Fundesc{Alias template}} -%% Cross reference +%% Cross-reference \newcommand{\xref}{\textsc{See also:}\space} \newcommand{\xrefc}[1]{\xref{} ISO C #1} From d1e109e43d7625f4a4ebb6a045fc68a275fca611 Mon Sep 17 00:00:00 2001 From: tocic Date: Wed, 28 Sep 2022 13:19:36 +0300 Subject: [PATCH 27/48] [std] Fix inconsistent hyphenation of "multidimensional" --- source/basic.tex | 4 ++-- source/classes.tex | 2 +- source/declarations.tex | 2 +- source/expressions.tex | 8 ++++---- source/meta.tex | 2 +- source/templates.tex | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/source/basic.tex b/source/basic.tex index 6fdda854a6..cb8225617f 100644 --- a/source/basic.tex +++ b/source/basic.tex @@ -320,7 +320,7 @@ the type of that object shall not be an incomplete type\iref{term.incomplete.type}, an abstract class type\iref{class.abstract}, or -a (possibly multi-dimensional) array thereof. +a (possibly multidimensional) array thereof. \rSec1[basic.def.odr]{One-definition rule}% \indextext{object!definition}% @@ -3362,7 +3362,7 @@ object or reference. A variable is said to have \defnadj{vacuous}{initialization} if it is default-initialized and, -if it is of class type or a (possibly multi-dimensional) array thereof, +if it is of class type or a (possibly multidimensional) array thereof, that class type has a trivial default constructor. The lifetime of an object of type \tcode{T} begins when: \begin{itemize} diff --git a/source/classes.tex b/source/classes.tex index fcabddde7d..72fd6ea45b 100644 --- a/source/classes.tex +++ b/source/classes.tex @@ -699,7 +699,7 @@ The type of a non-static data member shall not be an incomplete type\iref{term.incomplete.type}, an abstract class type\iref{class.abstract}, -or a (possibly multi-dimensional) array thereof. +or a (possibly multidimensional) array thereof. \begin{note} In particular, a class \tcode{C} cannot contain a non-static member of class \tcode{C}, diff --git a/source/declarations.tex b/source/declarations.tex index 0b07338299..f364493907 100644 --- a/source/declarations.tex +++ b/source/declarations.tex @@ -5147,7 +5147,7 @@ \end{example} \pnum -When initializing a multi-dimensional array, +When initializing a multidimensional array, the \grammarterm{initializer-clause}{s} initialize the elements with the last (rightmost) index of the array diff --git a/source/expressions.tex b/source/expressions.tex index bd1c566664..c2883a36c9 100644 --- a/source/expressions.tex +++ b/source/expressions.tex @@ -279,7 +279,7 @@ \pnum Unless otherwise indicated\iref{dcl.type.decltype}, a prvalue shall always have complete type or the \keyword{void} type; -if it has a class type or (possibly multi-dimensional) array of class type, +if it has a class type or (possibly multidimensional) array of class type, that class shall not be an abstract class\iref{class.abstract}. A glvalue shall not have type \cv{}~\keyword{void}. \begin{note} @@ -5834,7 +5834,7 @@ If the type is complete and if, for an array delete expression only, the operand is a pointer to a class type with a -non-trivial destructor or a (possibly multi-dimensional) array thereof, +non-trivial destructor or a (possibly multidimensional) array thereof, the function with a parameter of type \tcode{std::size_t} is selected. \item Otherwise, it is unspecified @@ -7678,9 +7678,9 @@ An object \tcode{a} is said to have \defnadj{constant}{destruction} if: \begin{itemize} \item - it is not of class type nor (possibly multi-dimensional) array thereof, or + it is not of class type nor (possibly multidimensional) array thereof, or \item - it is of class type or (possibly multi-dimensional) array thereof, + it is of class type or (possibly multidimensional) array thereof, that class type has a constexpr destructor, and for a hypothetical expression $E$ whose only effect is to destroy \tcode{a}, diff --git a/source/meta.tex b/source/meta.tex index 917869e651..7a31e4e60e 100644 --- a/source/meta.tex +++ b/source/meta.tex @@ -1792,7 +1792,7 @@ \indexlibraryglobal{remove_all_extents}% \tcode{template\br struct remove_all_extents;} & - If \tcode{T} is ``multi-dimensional array of \tcode{U}'', the resulting member + If \tcode{T} is ``multidimensional array of \tcode{U}'', the resulting member typedef \tcode{type} denotes \tcode{U}, otherwise \tcode{T}. \\ \end{libreqtab2a} diff --git a/source/templates.tex b/source/templates.tex index 613c87eb19..9ee3ac8108 100644 --- a/source/templates.tex +++ b/source/templates.tex @@ -402,7 +402,7 @@ all base classes and non-static data members are public and non-mutable and \item the types of all bases classes and non-static data members are -structural types or (possibly multi-dimensional) array thereof. +structural types or (possibly multidimensional) array thereof. \end{itemize} \end{itemize} From bf9edb92183b34421dd6e02474f2ac943fd7cea3 Mon Sep 17 00:00:00 2001 From: tocic Date: Fri, 7 Apr 2023 13:56:59 +0300 Subject: [PATCH 28/48] [diff.cpp17.temp] Fix inconsistent hyphenation of "well-formed" --- source/compatibility.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/compatibility.tex b/source/compatibility.tex index 2bf0b9f233..e29d646d0e 100644 --- a/source/compatibility.tex +++ b/source/compatibility.tex @@ -812,7 +812,7 @@ int main() { A a; f < a; // ill-formed; previously well-formed - (f) < a; // still well formed + (f) < a; // still well-formed } \end{codeblock} From 62cd54aedecb8bf152e80b1aced64d80e0b8bff6 Mon Sep 17 00:00:00 2001 From: tocic Date: Fri, 7 Apr 2023 13:57:28 +0300 Subject: [PATCH 29/48] [diff.cpp17.depr] Fix inconsistent hyphenation of "well-defined" --- source/compatibility.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/compatibility.tex b/source/compatibility.tex index e29d646d0e..0bdb90b9cc 100644 --- a/source/compatibility.tex +++ b/source/compatibility.tex @@ -1077,7 +1077,7 @@ The result of a call to this member function is not reliable in the presence of multiple threads and weak pointers. The member function \tcode{use_count} is similarly unreliable, but has a clearer contract in such cases, and remains -available for well defined use in single-threaded cases. +available for well-defined use in single-threaded cases. \effect A valid \CppXVII{} program that calls \tcode{unique} on a \tcode{shared_ptr} object may fail to compile. From 57ad77984fd2e07c90b1bb8ca34125452688031a Mon Sep 17 00:00:00 2001 From: tocic Date: Fri, 7 Apr 2023 13:51:09 +0300 Subject: [PATCH 30/48] [fs.path.type.cvt] Fix inconsistent hyphenation of "error-prone" --- source/iostreams.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/iostreams.tex b/source/iostreams.tex index 16a6d97b9a..d8c7513c8f 100644 --- a/source/iostreams.tex +++ b/source/iostreams.tex @@ -13610,8 +13610,8 @@ \begin{note} This results in behavior identical to other C and \Cpp{} standard library functions that perform file operations using ordinary character -strings to identify paths. Changing this behavior would be surprising and error -prone. +strings to identify paths. Changing this behavior would be surprising and +error-prone. \end{note} \item \keyword{wchar_t}: The encoding is the native wide encoding. The method of conversion is unspecified. From e16a651b7d6f490e9ffe003c9ca382970c478c1d Mon Sep 17 00:00:00 2001 From: tocic Date: Fri, 7 Apr 2023 13:45:39 +0300 Subject: [PATCH 31/48] [filesystems] Fix inconsistent hyphenation of "subdirectory" --- source/iostreams.tex | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/iostreams.tex b/source/iostreams.tex index d8c7513c8f..f8d884ff15 100644 --- a/source/iostreams.tex +++ b/source/iostreams.tex @@ -15237,12 +15237,12 @@ \tcode{update_existing} & Overwrite the existing file if it is older than the replacement file. \\ \capsep -\ohdrx{2}{Option group controlling \tcode{copy} function effects for sub-directories} \\ \rowsep +\ohdrx{2}{Option group controlling \tcode{copy} function effects for subdirectories} \\ \rowsep \lhdr{Constant} & \rhdr{Meaning} \\ \capsep \tcode{none} & - (Default) Do not copy sub-directories. \\ \rowsep + (Default) Do not copy subdirectories. \\ \rowsep \tcode{recursive} & - Recursively copy sub-directories and their contents. \\ \capsep + Recursively copy subdirectories and their contents. \\ \capsep \ohdrx{2}{Option group controlling \tcode{copy} function effects for symbolic links} \\ \rowsep \lhdr{Constant} & \rhdr{Meaning} \\ \capsep @@ -15998,7 +15998,7 @@ for each file in a directory or in an \impldef{type of a directory-like file} directory-like file type. \begin{note} -For iteration into sub-directories, see class \tcode{recursive_directory_iterator}\iref{fs.class.rec.dir.itr}. +For iteration into subdirectories, see class \tcode{recursive_directory_iterator}\iref{fs.class.rec.dir.itr}. \end{note} \begin{codeblock} @@ -16236,7 +16236,7 @@ An object of type \tcode{recursive_directory_iterator} provides an iterator for a sequence of \tcode{directory_entry} elements representing the files in a directory or in an \impldef{type of a directory-like file} directory-like file -type, and its sub-directories. +type, and its subdirectories. \begin{codeblock} namespace std::filesystem { From f52423c2a4d60d0ad653a3c8e2895037df016db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Sun, 30 Apr 2023 14:07:51 +0100 Subject: [PATCH 32/48] [format.string.std] Clarify how an integer is interpreted --- source/utilities.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/utilities.tex b/source/utilities.tex index cf2826fe3f..b8ea5c6858 100644 --- a/source/utilities.tex +++ b/source/utilities.tex @@ -15073,8 +15073,8 @@ \pnum % FIXME: What if it's an arg-id? If \fmtgrammarterm{positive-integer} is used in a -\fmtgrammarterm{width} option, the value of the decimal integer -is used as the value of the option. +\fmtgrammarterm{width} option, the value of the \fmtgrammarterm{positive-integer} +is interpreted as a decimal integer and used as the value of the option. \pnum For the purposes of width computation, From 3907e18f949af12d29ed589f0886810e6bb2595f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Sun, 30 Apr 2023 15:39:42 +0100 Subject: [PATCH 33/48] [lex, expr, dcl.dcl] Disable character protrusion from BNF lines. Microtype's character protrusion is not desired in the presentation of certain grammar productions, and strict alignment is better. --- source/declarations.tex | 2 ++ source/expressions.tex | 1 + source/lex.tex | 1 + 3 files changed, 4 insertions(+) diff --git a/source/declarations.tex b/source/declarations.tex index f364493907..06c3caad99 100644 --- a/source/declarations.tex +++ b/source/declarations.tex @@ -2228,6 +2228,7 @@ \end{bnf} \begin{bnf} +\microtypesetup{protrusion=false}\obeyspaces \nontermdef{ptr-operator}\br \terminal{*} \opt{attribute-specifier-seq} \opt{cv-qualifier-seq}\br \terminal{\&} \opt{attribute-specifier-seq}\br @@ -8446,6 +8447,7 @@ \end{bnf} \begin{bnf} +\microtypesetup{protrusion=false}\obeyspaces \nontermdef{balanced-token}\br \terminal{(} \opt{balanced-token-seq} \terminal{)}\br \terminal{[} \opt{balanced-token-seq} \terminal{]}\br diff --git a/source/expressions.tex b/source/expressions.tex index c2883a36c9..abdb47f60c 100644 --- a/source/expressions.tex +++ b/source/expressions.tex @@ -2769,6 +2769,7 @@ \end{bnf} \begin{bnf} +\microtypesetup{protrusion=false}\obeyspaces \nontermdef{requirement-body}\br \terminal{\{} requirement-seq \terminal{\}} \end{bnf} diff --git a/source/lex.tex b/source/lex.tex index 022a2ac9ad..a253a50bae 100644 --- a/source/lex.tex +++ b/source/lex.tex @@ -692,6 +692,7 @@ \indextext{header!name|(}% \begin{bnf} +\microtypesetup{protrusion=false}\obeyspaces \nontermdef{header-name}\br \terminal{<} h-char-sequence \terminal{>}\br \terminal{"} q-char-sequence \terminal{"} From 62d7d5a2e51d63d676cc93bfe69d4d55ea635983 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Sun, 30 Apr 2023 14:15:35 +0100 Subject: [PATCH 34/48] [class.{default,copy}.ctor] Use new term "constexpr-suitable". As of CWG2602 (ce7d8b0360e1509de6f7fd073d0a091238b1326f), the term "constexpr-suitable" replaces the previous phrase "satisfy the requirements for a constexpr function". --- source/classes.tex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/classes.tex b/source/classes.tex index 72fd6ea45b..8735ff7c11 100644 --- a/source/classes.tex +++ b/source/classes.tex @@ -1313,8 +1313,8 @@ \grammarterm{compound-statement}. If that user-written default constructor would be ill-formed, the program is ill-formed. -If that user-written default constructor would satisfy the requirements -of a constexpr function\iref{dcl.constexpr}, the implicitly-defined +If that user-written default constructor would be constexpr-suitable\iref{dcl.constexpr}, +the implicitly-defined default constructor is \keyword{constexpr}. Before the defaulted default constructor for a class is implicitly defined, @@ -1601,8 +1601,8 @@ The copy/move constructor is implicitly defined even if the implementation elided its odr-use\iref{term.odr.use,class.temporary}. \end{note} -If an implicitly-defined\iref{dcl.fct.def.default} constructor would satisfy the requirements of a -constexpr function\iref{dcl.constexpr}, the implicitly-defined +If an implicitly-defined\iref{dcl.fct.def.default} constructor would be constexpr-suitable\iref{dcl.constexpr}, +the implicitly-defined constructor is \keyword{constexpr}. \pnum From 696ddeb2b28b48efaffa93b881ff667d85d0a457 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Sun, 30 Apr 2023 14:22:32 +0100 Subject: [PATCH 35/48] [time.duration.general] Use new term "constexpr-suitable". --- source/time.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/time.tex b/source/time.tex index ccfce44fbf..ef7289cb8f 100644 --- a/source/time.tex +++ b/source/time.tex @@ -1282,7 +1282,7 @@ The defaulted copy constructor of duration shall be a constexpr function if and only if the required initialization of the member \tcode{rep_} for copy and move, respectively, would -satisfy the requirements for a constexpr function. +be constexpr-suitable\iref{dcl.constexpr}. \pnum \begin{example} From 79aef51943810dcf14654490fb6101bbc9e4a0f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Sun, 30 Apr 2023 14:23:05 +0100 Subject: [PATCH 36/48] [pairs.pair, variant.ctor, tuple.cnstr] Use new term "constexpr-suitable". --- source/utilities.tex | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/utilities.tex b/source/utilities.tex index b8ea5c6858..fa97afb0d6 100644 --- a/source/utilities.tex +++ b/source/utilities.tex @@ -779,8 +779,8 @@ \pnum The defaulted move and copy constructor, respectively, of \tcode{pair} is a constexpr function if and only if all required element-wise -initializations for move and copy, respectively, would satisfy the -requirements for a constexpr function. +initializations for move and copy, respectively, +would be constexpr-suitable\iref{dcl.constexpr}. \pnum If \tcode{(is_trivially_destructible_v \&\& is_trivially_destructible_v)} @@ -1749,8 +1749,8 @@ The defaulted move and copy constructor, respectively, of \tcode{tuple} is a constexpr function if and only if all required element-wise initializations for move and copy, respectively, -would satisfy the requirements for a constexpr function. The -defaulted move and copy constructor of \tcode{tuple<>} are +would be constexpr-suitable\iref{dcl.constexpr}. +The defaulted move and copy constructor of \tcode{tuple<>} are constexpr functions. \pnum @@ -5066,8 +5066,8 @@ \pnum \remarks This function is \keyword{constexpr} if and only if the -value-initialization of the alternative type $\tcode{T}_0$ would satisfy the -requirements for a constexpr function. +value-initialization of the alternative type $\tcode{T}_0$ +would be constexpr-suitable\iref{dcl.constexpr}. The exception specification is equivalent to \tcode{is_nothrow_default_constructible_v<$\tcode{T}_0$>}. \begin{note} From b6903b6fe23d06e23191e672ae287f0de0de472c Mon Sep 17 00:00:00 2001 From: Jens Maurer Date: Mon, 1 May 2023 09:47:08 +0200 Subject: [PATCH 37/48] [cpp.predefined] Add __cpp_auto_cast --- source/preprocessor.tex | 1 + 1 file changed, 1 insertion(+) diff --git a/source/preprocessor.tex b/source/preprocessor.tex index 5ad072c5c1..0093ee7c8f 100644 --- a/source/preprocessor.tex +++ b/source/preprocessor.tex @@ -1808,6 +1808,7 @@ \defnxname{cpp_alias_templates} & \tcode{200704L} \\ \rowsep \defnxname{cpp_aligned_new} & \tcode{201606L} \\ \rowsep \defnxname{cpp_attributes} & \tcode{200809L} \\ \rowsep +\defnxname{cpp_auto_cast} & \tcode{202110L} \\ \rowsep \defnxname{cpp_binary_literals} & \tcode{201304L} \\ \rowsep \defnxname{cpp_capture_star_this} & \tcode{201603L} \\ \rowsep \defnxname{cpp_char8_t} & \tcode{202207L} \\ \rowsep From 8f946881355fbbe031a325168078b2925e029bba Mon Sep 17 00:00:00 2001 From: xmh0511 <970252187@qq.com> Date: Tue, 2 May 2023 01:31:02 +0800 Subject: [PATCH 38/48] [temp.variadic] Change "init-capture pack" to "init-capture pack declaration" --- source/templates.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/templates.tex b/source/templates.tex index 9ee3ac8108..edac0e2650 100644 --- a/source/templates.tex +++ b/source/templates.tex @@ -2831,7 +2831,7 @@ designating the variable introduced by the $i^\text{th}$ \grammarterm{init-capture} that resulted from instantiation of -the \grammarterm{init-capture} pack. +the \grammarterm{init-capture} pack declaration. \end{itemize} When $N$ is zero, the instantiation of a pack expansion does not alter the syntactic interpretation of the enclosing construct, From b5e540fe46ba55dfe249c9df8a7b0cc44ba0efe6 Mon Sep 17 00:00:00 2001 From: "A. Jiang" Date: Thu, 4 May 2023 14:05:09 +0800 Subject: [PATCH 39/48] [cmp.alg] Add missing formatting for `F` (#6243) --- source/support.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/support.tex b/source/support.tex index 13b3dc132b..60320199c9 100644 --- a/source/support.tex +++ b/source/support.tex @@ -4949,7 +4949,7 @@ \pnum The name \tcode{compare_strong_order_fallback} denotes a customization point object\iref{customization.point.object}. -Given subexpressions \tcode{E} and {F}, +Given subexpressions \tcode{E} and \tcode{F}, the expression \tcode{compare_strong_order_fallback(E, F)} is expression-equivalent\iref{defns.expression.equivalent} to: \begin{itemize} From b81e4be37c5f7a4d374546a72bfc82c96601aee2 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 5 May 2023 12:01:05 +0100 Subject: [PATCH 40/48] [container.alloc.reqmts] Fix incorrect change of \mandates to \expects This was incorrectly changed from a \mandates to an \expects when 93ff092d1cd2b335f372b9546365b3d495caf2d8 replaced the requirements tables. --- source/containers.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/containers.tex b/source/containers.tex index 7cd5bba11f..6ff0bc27ed 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -1031,7 +1031,7 @@ \tcode{A} \pnum -\expects +\mandates \tcode{allocator_type::value_type} is the same as \tcode{X::value_type}. \end{itemdescr} From 7003252f4db8b388dd097790b374ffed3be1ff56 Mon Sep 17 00:00:00 2001 From: Arthur O'Dwyer Date: Sun, 7 May 2023 16:27:19 -0400 Subject: [PATCH 41/48] [flat.map.cons] Close an angle bracket (#6245) --- source/containers.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/containers.tex b/source/containers.tex index 6ff0bc27ed..6210e070b1 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -15197,7 +15197,7 @@ \begin{itemdescr} \pnum \constraints -\tcode{uses_allocator_v} is \tcode{true} and \tcode{uses_allocator_v} is \tcode{true}. \pnum From e7492cef7f930089e009913bff6ac30f41d6165e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Sat, 6 May 2023 02:47:07 +0100 Subject: [PATCH 42/48] [format] Fix presentation of whitespace; use \caret --- source/utilities.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/utilities.tex b/source/utilities.tex index fa97afb0d6..1b40eb3974 100644 --- a/source/utilities.tex +++ b/source/utilities.tex @@ -14907,7 +14907,7 @@ string s1 = format("{:6}", 'x'); // value of \tcode{s1} is \tcode{"x\ \ \ \ \ "} string s2 = format("{:*<6}", 'x'); // value of \tcode{s2} is \tcode{"x*****"} string s3 = format("{:*>6}", 'x'); // value of \tcode{s3} is \tcode{"*****x"} -string s4 = format("{:*^6}", 'x'); // value of \tcode{s4} is \tcode{"**x***"} +string s4 = format("{:*@\caret{}@6}", 'x'); // value of \tcode{s4} is \tcode{"**x***"} string s5 = format("{:6d}", c); // value of \tcode{s5} is \tcode{"\ \ \ 120"} string s6 = format("{:6}", true); // value of \tcode{s6} is \tcode{"true\ \ "} string s7 = format("{:*<6.3}", "123456"); // value of \tcode{s7} is \tcode{"123***"} @@ -15052,7 +15052,7 @@ string s1 = format("{:+06d}", c); // value of \tcode{s1} is \tcode{"+00120"} string s2 = format("{:#06x}", 0xa); // value of \tcode{s2} is \tcode{"0x000a"} string s3 = format("{:<06}", -42); // value of \tcode{s3} is \tcode{"-42\ \ \ "} (\tcode{0} has no effect) -string s4 = format("{:06}", inf); // value of \tcode{s4} is \tcode{" inf"} (\tcode{0} has no effect) +string s4 = format("{:06}", inf); // value of \tcode{s4} is \tcode{"\ \ \ inf"} (\tcode{0} has no effect) \end{codeblock} \end{example} @@ -16136,7 +16136,7 @@ %% FIXME: their Unicode characters are not available in our font (Latin Modern). \begin{example} \begin{codeblock} -string s0 = format("[{}]", "h\tllo"); // \tcode{s0} has value: \tcode{[h llo]} +string s0 = format("[{}]", "h\tllo"); // \tcode{s0} has value: \tcode{[h\ \ \ \ llo]} string s1 = format("[{:?}]", "h\tllo"); // \tcode{s1} has value: \tcode{["h\textbackslash tllo"]} string s3 = format("[{:?}, {:?}]", '\'', '"'); // \tcode{s3} has value: \tcode{['\textbackslash '', '"']} From f8f5b8b564a785297a43b6b823b521e5adc79fb9 Mon Sep 17 00:00:00 2001 From: Arthur O'Dwyer Date: Mon, 8 May 2023 14:30:31 -0400 Subject: [PATCH 43/48] [flat.map.modifiers] "Arg..." should be "Args..." (#6249) --- source/containers.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/containers.tex b/source/containers.tex index 6210e070b1..169013101c 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -15334,7 +15334,7 @@ \begin{itemdescr} \pnum \constraints -\tcode{is_constructible_v, Arg...>} is \tcode{true}. +\tcode{is_constructible_v, Args...>} is \tcode{true}. \pnum \effects From 02545c761c7f6c9e336c6badf8660b2baf4ac627 Mon Sep 17 00:00:00 2001 From: Arthur O'Dwyer Date: Tue, 9 May 2023 13:25:42 -0400 Subject: [PATCH 44/48] [flat.set.modifiers] `(first, last)` should be `rg` (#6246) Restore consistency with [flat.map.modifiers]/13, which already uses `ranges::distance(rg)`. --- source/containers.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/containers.tex b/source/containers.tex index 169013101c..c2b3a424fa 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -16955,7 +16955,7 @@ \pnum \complexity $N$ + $M \log M$, where $N$ is \tcode{size()} before the operation and $M$ -is \tcode{distance(first, last)}. +is \tcode{ranges::distance(rg)}. \pnum \remarks From 3e5125aa8e39ad8ab6b4b5b525c1349725bfcc4b Mon Sep 17 00:00:00 2001 From: morinmorin Date: Wed, 10 May 2023 20:16:31 +0900 Subject: [PATCH 45/48] [macros] Prevent double spacing in tcode (#6200) In `\nofrenchspacing`, a space after `.`, `?`, `!`, `:` are rendered as two spaces in monospaced fonts if these punctuations are preceded by non-capital characters. This can be fixed by adding `\frenchspacing` to `CodeStylex`. Also fixes some line breaking by adding hyphenation hints. --- source/macros.tex | 4 ++-- source/ranges.tex | 4 ++-- source/std.tex | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/source/macros.tex b/source/macros.tex index 64b85f0b77..13a4203294 100644 --- a/source/macros.tex +++ b/source/macros.tex @@ -175,7 +175,7 @@ % This command uses the "cooked" \indeximpldef command to emit index % entries; thus they only work for simple index entries that do not contain % special indexing instructions. -\newcommand{\impldef}[1]{\indeximpldef{#1}implementation-defined} +\newcommand{\impldef}[1]{\indeximpldef{#1}imple\-men\-ta\-tion-defined} % \impldefplain passes the argument directly to the index, allowing you to % use special indexing instructions (!, @, |). \newcommand{\impldefplain}[1]{\index[impldefindex]{#1}implementation-defined} @@ -219,7 +219,7 @@ % General code style %%-------------------------------------------------- \newcommand{\CodeStyle}{\ttfamily} -\newcommand{\CodeStylex}[1]{\texttt{#1}} +\newcommand{\CodeStylex}[1]{\texttt{\protect\frenchspacing #1}} \definecolor{grammar-gray}{gray}{0.2} diff --git a/source/ranges.tex b/source/ranges.tex index b7054b977a..851ed0248e 100644 --- a/source/ranges.tex +++ b/source/ranges.tex @@ -10871,7 +10871,7 @@ Otherwise, if \tcode{(\libconcept{derived_from} \&\& ...)} is \tcode{true}, -\tcode{itera\-tor_category} denotes \tcode{bidirectional_iterator_tag}. +\tcode{iterator\-_category} denotes \tcode{bidirectional_iterator_tag}. \item Otherwise, if \tcode{(\libconcept{derived_from} \&\& ...)} @@ -15108,7 +15108,7 @@ \tcode{false} otherwise; and \item \tcode{\exposid{begin-or-first-end}(rng)} be expression-equivalent to -\tcode{\exposid{is-empty} ? ranges::begin(rng) : \exposid{cartesian-common-arg-end}(rng)} +\tcode{\exposid{is-empty} ? ranges::begin(rng) : \brk{}\exposid{cartesian-common-arg-end}(rng)} if \tcode{rng} is the first underlying range and \tcode{ranges::begin(rng)} otherwise. \end{itemize} diff --git a/source/std.tex b/source/std.tex index b58362bcb1..ee39c38fa8 100644 --- a/source/std.tex +++ b/source/std.tex @@ -74,6 +74,7 @@ \pdfstringdefDisableCommands{\def\textbf#1{#1}} \pdfstringdefDisableCommands{\def\raisebox#1{}} \pdfstringdefDisableCommands{\def\hspace#1{}} +\pdfstringdefDisableCommands{\def\frenchspacing{}} %%-------------------------------------------------- %% add special hyphenation rules From 0667db07b17b15041e7160d9d5d599be4bfb3e62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Wed, 10 May 2023 13:00:55 +0100 Subject: [PATCH 46/48] [layout] Set \raggedbottom explicitly; it is not always the default --- source/layout.tex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/layout.tex b/source/layout.tex index 65c53124f9..b74849dd00 100644 --- a/source/layout.tex +++ b/source/layout.tex @@ -21,7 +21,9 @@ %%-------------------------------------------------- %% If there is insufficient stretchable vertical space on a page, %% TeX will not properly consider penalties for a good page break, -%% even if \raggedbottom (default) is in effect. +%% even if \raggedbottom (default for oneside, not for twoside) +%% is in effect. +\raggedbottom \addtolength{\topskip}{0pt plus 20pt} %%-------------------------------------------------- From 58f989c021bee09d47c7d3f789e8fd91da125527 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Wed, 10 May 2023 13:26:43 +0100 Subject: [PATCH 47/48] [expr.const] More generous whitespace in example --- source/expressions.tex | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/expressions.tex b/source/expressions.tex index abdb47f60c..8026d15967 100644 --- a/source/expressions.tex +++ b/source/expressions.tex @@ -7656,13 +7656,17 @@ void splash(Swim& swam) { static_assert(swam.phelps() == 28); // OK static_assert((&swam)->phelps() == 28); // OK + Swim* pswam = &swam; static_assert(pswam->phelps() == 28); // error: lvalue-to-rvalue conversion on a pointer // not usable in constant expressions + static_assert(how_many(swam) == 28); // OK static_assert(Swim().lochte() == 12); // OK + static_assert(swam.lochte() == 12); // error: invoking virtual function on reference // with constexpr-unknown dynamic type + static_assert(swam.coughlin == 12); // error: lvalue-to-rvalue conversion on an object // not usable in constant expressions } From 4e4de1df8ee941255b653b61d0a62050b34cf8c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Wed, 10 May 2023 10:33:41 +0100 Subject: [PATCH 48/48] Update configuration for new working draft N4950 and add corresponding Editors' Report N4951, update value of __cplusplus for C++23 --- papers/n4951.html | 447 +++++++++++++++++++++++++++++++++++++++++++++ papers/n4951.md | 306 +++++++++++++++++++++++++++++++ papers/wd-index.md | 1 + source/config.tex | 4 +- 4 files changed, 756 insertions(+), 2 deletions(-) create mode 100644 papers/n4951.html create mode 100644 papers/n4951.md diff --git a/papers/n4951.html b/papers/n4951.html new file mode 100644 index 0000000000..ab5636e4d9 --- /dev/null +++ b/papers/n4951.html @@ -0,0 +1,447 @@ + + + + + +N4951 + + +

N4951 Editors’ Report:
Programming Languages — C++

+ +

Date: 2023-05-10

+ +

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

+ +
    +
  • N4950 is the +current and final working draft for C++23. It replaces +N4944, and it +forms the basis of the Draft International Standard for C++23.
  • +
  • N4951 is this Editors' Report.
  • +
  • The next working draft will be for C++26.
  • +
+ +

Editorial changes

+ +

There have not been any motions from WG21 since the last working draft. This +revision incorporates all the changes requested by the editorial review +committee in preparation of the Draft International Standard (DIS) ballot, +as well as other editorial changes.

+ +

Minor editorial changes

+ +

A log of editorial fixes made to the working draft since N4944 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 b8512a1c292adee71c1145d3c61e32d48dcb8daa
+Author: morinmorin <mimomorin@gmail.com>
+Date:   Wed Mar 15 01:45:28 2023 +0900
+
+    [container.requirements.general] Move exposition-only concept
+
+    The exposition-only concept container-compatible-range is defined
+    in the subclause for allocator-aware containers, that does not
+    actually use it.  This requirement is used throughout the subclause
+    for a variety of contains, so relocate the definition into the
+    leading subclause that provides a key to definitions used throughout
+    the containers subclauses.
+
+commit 6e7fd98b684a92405934de981abf01414a67ddbd
+Author: Jonathan Wakely <cxx@kayari.org>
+Date:   Thu Mar 23 14:21:22 2023 +0000
+
+    [version.syn] bump value of __cpp_lib_allocate_at_least
+
+    This is requested for the Tentatively Ready LWG issue 3887.
+
+    Fixes #6202
+
+commit a0403a9407e6520b6bbf0e818d9db8ac1282f4e1
+Author: lprv <100177227+lprv@users.noreply.github.com>
+Date:   Sat Mar 11 20:40:30 2023 +0000
+
+    [module.interface] Fix outdated example
+
+commit 2c7e87d447d65684c74890074999c60bb45712ab
+Author: Christian Trott <crtrott@sandia.gov>
+Date:   Fri Mar 24 09:32:22 2023 -0700
+
+    [mdspan.layout.left.cons] extents() should be other.extents() (#6069)
+
+    The precondition was erroneously referring to the not yet
+    constructed extents instead of other.extents().
+
+    Note that the extents of the to be constructed layout will be
+    initialized with other.extents - i.e. after construction they will
+    return the same value for the fwd-prod-of-extents etc.
+
+commit 1b0fe66324f2d5e7861397d7f537243833418cde
+Author: Jakub Mazurkiewicz <mazkuba3@gmail.com>
+Date:   Fri Mar 24 17:33:09 2023 +0100
+
+    [range.cartesian.view] Add missing views:: qualifier (#6059)
+
+commit 562af663363337848bcb34a8f5ba37641fb0560e
+Author: Alisdair Meredith <alisdairm@me.com>
+Date:   Mon Mar 27 17:06:50 2023 -0400
+
+    [over.literal] Cross-reference deprecated grammar (#6209)
+
+    The core convention is to retain deprecated wording in the
+    core clauses, but always make a reference to Annex D
+    where a feature, or parts of a feature, are deprecated.
+
+commit ac47f9cb768760f0abd7a57cbf3074ad5eebf011
+Author: Alisdair Meredith <alisdairm@me.com>
+Date:   Mon Mar 27 17:09:44 2023 -0400
+
+    [container.reqmts] Move requirements to the right place (#6199)
+
+    As part of the replacement of the container requirements tables with text,
+    several paragraphs of general container requirements were buried
+    in the new subsections for more specific requirements such as
+    reversible containers or allocator-aware containers.
+
+    This seems to have happened when general container requirements
+    followed one of the container requirements tables that are now expressed
+    as text. This change carefully restores text to the general container requirements
+    clause, in the original order they appeared in C++20.
+
+commit bb65fc8e22b8e056cfbeb45ba65c6f37bf355182
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Tue Mar 28 21:04:20 2023 +0200
+
+    [dcl.decl.general] Fix cross-references
+
+    "templated function" is defined in [temp.pre], but avoid having
+    two cross-references to the same place in the same paragraph by
+    dropping the cross-reference for the definition of the grammar
+    non-terminal "requires-clause".
+
+commit 8c99598b60f0a059b37c7e1fd82480aaf32169a5
+Author: Thomas Köppe <tkoeppe@google.com>
+Date:   Wed Mar 29 10:47:27 2023 +0100
+
+    [class.member.lookup] Also change "N" to "M" in note.
+
+    This change should have been part of the resolution of CWG2642 (via
+    CWG Motion 1), but was accidentally omitted there.
+
+commit 8e2d6ee92f372d9526c01a8fb601da9921c94b2a
+Author: Thomas Köppe <tkoeppe@google.com>
+Date:   Wed Mar 29 16:08:57 2023 +0100
+
+    [stacktrace.format] Use full typename "basic_stacktrace<Allocator>".
+
+commit 70b2f7b6bf0d7fe3d87d9438459f766fdd83b08c
+Author: Thomas Köppe <tkoeppe@google.com>
+Date:   Wed Mar 29 17:31:24 2023 +0100
+
+    [indirectcallable.indirectinvocable] Remove stray "&".
+
+    This was an error in the application of P2609R3.
+
+commit 08581e85636794384029de729a641975bb13260c
+Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
+Date:   Sun Apr 16 05:18:24 2023 -0400
+
+    [alg.unique] fix typo: namepace -> namespace
+
+commit 1a2e97de0517bb9ee1715a9664fa2861fa025cda
+Author: Hewill Kang <67143766+hewillk@users.noreply.github.com>
+Date:   Mon Apr 17 14:31:05 2023 +0800
+
+    [range.repeat.iterator] Remove redundant period (#6234)
+
+commit 44ff7aa92ba7f716abe96c29876b2ea145a22c66
+Author: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com>
+Date:   Fri Apr 21 18:56:31 2023 +0330
+
+    [check.yml] update version of "upload" action (#6231)
+
+    Update the `actions/upload-artifact` action to version 3.
+
+commit 413b147b0f48ea87606e0b7fbc107c8316b98fc3
+Author: Detlef Riekenberg <wine.dev@web.de>
+Date:   Thu Apr 27 04:00:32 2023 +0200
+
+    [compliance, headers.cpp.fs] Fix subclause name for cstddef (#6227)
+
+commit 82ecf4355a016847ffcf778abfcf1fe96d02fc79
+Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
+Date:   Sun Apr 30 07:56:10 2023 -0400
+
+    [flat.map.modifiers] Fix erroneous "try_emplace_hint" (#6238)
+
+    The hint-taking operation is instead an overload of try_emplace.
+
+commit 9568c66abd12eadd696b9f16bb4884908e2aad66
+Author: Daniel Krügler <daniel.kruegler@gmail.com>
+Date:   Sun Apr 30 13:57:23 2023 +0200
+
+    [ranges] Remove "inline" from variable templates (#6218)
+
+commit bdd25a63a8a84a1183ebc125dac132d0572f67fd
+Author: Alisdair Meredith <alisdairm@me.com>
+Date:   Sun Apr 30 08:02:42 2023 -0400
+
+    [iterator.concept.winc] Improve implementation-defined text (#6228)
+
+commit 057da6c79e35cc4cdebaa5a6096738f273c6c2e8
+Author: tocic <tocic@protonmail.ch>
+Date:   Wed Sep 28 13:14:14 2022 +0300
+
+    [back, macros] Fix inconsistent hyphenation of "cross-reference"
+
+commit d1e109e43d7625f4a4ebb6a045fc68a275fca611
+Author: tocic <tocic@protonmail.ch>
+Date:   Wed Sep 28 13:19:36 2022 +0300
+
+    [std] Fix inconsistent hyphenation of "multidimensional"
+
+commit bf9edb92183b34421dd6e02474f2ac943fd7cea3
+Author: tocic <tocic@protonmail.ch>
+Date:   Fri Apr 7 13:56:59 2023 +0300
+
+    [diff.cpp17.temp] Fix inconsistent hyphenation of "well-formed"
+
+commit 62cd54aedecb8bf152e80b1aced64d80e0b8bff6
+Author: tocic <tocic@protonmail.ch>
+Date:   Fri Apr 7 13:57:28 2023 +0300
+
+    [diff.cpp17.depr] Fix inconsistent hyphenation of "well-defined"
+
+commit 57ad77984fd2e07c90b1bb8ca34125452688031a
+Author: tocic <tocic@protonmail.ch>
+Date:   Fri Apr 7 13:51:09 2023 +0300
+
+    [fs.path.type.cvt] Fix inconsistent hyphenation of "error-prone"
+
+commit e16a651b7d6f490e9ffe003c9ca382970c478c1d
+Author: tocic <tocic@protonmail.ch>
+Date:   Fri Apr 7 13:45:39 2023 +0300
+
+    [filesystems] Fix inconsistent hyphenation of "subdirectory"
+
+commit f52423c2a4d60d0ad653a3c8e2895037df016db0
+Author: Thomas Köppe <tkoeppe@google.com>
+Date:   Sun Apr 30 14:07:51 2023 +0100
+
+    [format.string.std] Clarify how an integer is interpreted
+
+commit 62d7d5a2e51d63d676cc93bfe69d4d55ea635983
+Author: Thomas Köppe <tkoeppe@google.com>
+Date:   Sun Apr 30 14:15:35 2023 +0100
+
+    [class.{default,copy}.ctor] Use new term "constexpr-suitable".
+
+    As of CWG2602 (ce7d8b0360e1509de6f7fd073d0a091238b1326f), the term
+    "constexpr-suitable" replaces the previous phrase "satisfy the
+    requirements for a constexpr function".
+
+commit 696ddeb2b28b48efaffa93b881ff667d85d0a457
+Author: Thomas Köppe <tkoeppe@google.com>
+Date:   Sun Apr 30 14:22:32 2023 +0100
+
+    [time.duration.general] Use new term "constexpr-suitable".
+
+commit 79aef51943810dcf14654490fb6101bbc9e4a0f9
+Author: Thomas Köppe <tkoeppe@google.com>
+Date:   Sun Apr 30 14:23:05 2023 +0100
+
+    [pairs.pair, variant.ctor, tuple.cnstr] Use new term "constexpr-suitable".
+
+commit b6903b6fe23d06e23191e672ae287f0de0de472c
+Author: Jens Maurer <Jens.Maurer@gmx.net>
+Date:   Mon May 1 09:47:08 2023 +0200
+
+    [cpp.predefined] Add __cpp_auto_cast
+
+commit 8f946881355fbbe031a325168078b2925e029bba
+Author: xmh0511 <970252187@qq.com>
+Date:   Tue May 2 01:31:02 2023 +0800
+
+    [temp.variadic] Change "init-capture pack" to "init-capture pack declaration"
+
+commit b81e4be37c5f7a4d374546a72bfc82c96601aee2
+Author: Jonathan Wakely <cxx@kayari.org>
+Date:   Fri May 5 12:01:05 2023 +0100
+
+    [container.alloc.reqmts] Fix incorrect change of \mandates to \expects
+
+    This was incorrectly changed from a \mandates to an \expects when
+    93ff092d1cd2b335f372b9546365b3d495caf2d8 replaced the requirements
+    tables.
+
+commit 7003252f4db8b388dd097790b374ffed3be1ff56
+Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
+Date:   Sun May 7 16:27:19 2023 -0400
+
+    [flat.map.cons] Close an angle bracket (#6245)
+
+commit e7492cef7f930089e009913bff6ac30f41d6165e
+Author: Thomas Köppe <tkoeppe@google.com>
+Date:   Sat May 6 02:47:07 2023 +0100
+
+    [format] Fix presentation of whitespace; use \caret
+
+commit f8f5b8b564a785297a43b6b823b521e5adc79fb9
+Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
+Date:   Mon May 8 14:30:31 2023 -0400
+
+    [flat.map.modifiers] "Arg..." should be "Args..." (#6249)
+
+commit 02545c761c7f6c9e336c6badf8660b2baf4ac627
+Author: Arthur O'Dwyer <arthur.j.odwyer@gmail.com>
+Date:   Tue May 9 13:25:42 2023 -0400
+
+    [flat.set.modifiers] `(first, last)` should be `rg` (#6246)
+
+    Restore consistency with [flat.map.modifiers]/13, which already uses `ranges::distance(rg)`.
+
+ + diff --git a/papers/n4951.md b/papers/n4951.md new file mode 100644 index 0000000000..01e7a0651d --- /dev/null +++ b/papers/n4951.md @@ -0,0 +1,306 @@ +# N4951 Editors' Report -- Programming Languages -- C++ + +Date: 2023-05-10 + +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 + + * [N4950](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf) is the + current and final working draft for C++23. It replaces + [N4944](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4944.pdf), and it + forms the basis of the Draft International Standard for C++23. + * N4951 is this Editors' Report. + * The next working draft will be for C++26. + +### Editorial changes + +There have not been any motions from WG21 since the last working draft. This +revision incorporates all the changes requested by the editorial review +committee in preparation of the Draft International Standard (DIS) ballot, +as well as other editorial changes. + +### Minor editorial changes + +A log of editorial fixes made to the working draft since N4944 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/n4944...n4950). + + commit b8512a1c292adee71c1145d3c61e32d48dcb8daa + Author: morinmorin + Date: Wed Mar 15 01:45:28 2023 +0900 + + [container.requirements.general] Move exposition-only concept + + The exposition-only concept container-compatible-range is defined + in the subclause for allocator-aware containers, that does not + actually use it. This requirement is used throughout the subclause + for a variety of contains, so relocate the definition into the + leading subclause that provides a key to definitions used throughout + the containers subclauses. + + commit 6e7fd98b684a92405934de981abf01414a67ddbd + Author: Jonathan Wakely + Date: Thu Mar 23 14:21:22 2023 +0000 + + [version.syn] bump value of __cpp_lib_allocate_at_least + + This is requested for the Tentatively Ready LWG issue 3887. + + Fixes #6202 + + commit a0403a9407e6520b6bbf0e818d9db8ac1282f4e1 + Author: lprv <100177227+lprv@users.noreply.github.com> + Date: Sat Mar 11 20:40:30 2023 +0000 + + [module.interface] Fix outdated example + + commit 2c7e87d447d65684c74890074999c60bb45712ab + Author: Christian Trott + Date: Fri Mar 24 09:32:22 2023 -0700 + + [mdspan.layout.left.cons] extents() should be other.extents() (#6069) + + The precondition was erroneously referring to the not yet + constructed extents instead of other.extents(). + + Note that the extents of the to be constructed layout will be + initialized with other.extents - i.e. after construction they will + return the same value for the fwd-prod-of-extents etc. + + commit 1b0fe66324f2d5e7861397d7f537243833418cde + Author: Jakub Mazurkiewicz + Date: Fri Mar 24 17:33:09 2023 +0100 + + [range.cartesian.view] Add missing views:: qualifier (#6059) + + commit 562af663363337848bcb34a8f5ba37641fb0560e + Author: Alisdair Meredith + Date: Mon Mar 27 17:06:50 2023 -0400 + + [over.literal] Cross-reference deprecated grammar (#6209) + + The core convention is to retain deprecated wording in the + core clauses, but always make a reference to Annex D + where a feature, or parts of a feature, are deprecated. + + commit ac47f9cb768760f0abd7a57cbf3074ad5eebf011 + Author: Alisdair Meredith + Date: Mon Mar 27 17:09:44 2023 -0400 + + [container.reqmts] Move requirements to the right place (#6199) + + As part of the replacement of the container requirements tables with text, + several paragraphs of general container requirements were buried + in the new subsections for more specific requirements such as + reversible containers or allocator-aware containers. + + This seems to have happened when general container requirements + followed one of the container requirements tables that are now expressed + as text. This change carefully restores text to the general container requirements + clause, in the original order they appeared in C++20. + + commit bb65fc8e22b8e056cfbeb45ba65c6f37bf355182 + Author: Jens Maurer + Date: Tue Mar 28 21:04:20 2023 +0200 + + [dcl.decl.general] Fix cross-references + + "templated function" is defined in [temp.pre], but avoid having + two cross-references to the same place in the same paragraph by + dropping the cross-reference for the definition of the grammar + non-terminal "requires-clause". + + commit 8c99598b60f0a059b37c7e1fd82480aaf32169a5 + Author: Thomas Köppe + Date: Wed Mar 29 10:47:27 2023 +0100 + + [class.member.lookup] Also change "N" to "M" in note. + + This change should have been part of the resolution of CWG2642 (via + CWG Motion 1), but was accidentally omitted there. + + commit 8e2d6ee92f372d9526c01a8fb601da9921c94b2a + Author: Thomas Köppe + Date: Wed Mar 29 16:08:57 2023 +0100 + + [stacktrace.format] Use full typename "basic_stacktrace". + + commit 70b2f7b6bf0d7fe3d87d9438459f766fdd83b08c + Author: Thomas Köppe + Date: Wed Mar 29 17:31:24 2023 +0100 + + [indirectcallable.indirectinvocable] Remove stray "&". + + This was an error in the application of P2609R3. + + commit 08581e85636794384029de729a641975bb13260c + Author: Arthur O'Dwyer + Date: Sun Apr 16 05:18:24 2023 -0400 + + [alg.unique] fix typo: namepace -> namespace + + commit 1a2e97de0517bb9ee1715a9664fa2861fa025cda + Author: Hewill Kang <67143766+hewillk@users.noreply.github.com> + Date: Mon Apr 17 14:31:05 2023 +0800 + + [range.repeat.iterator] Remove redundant period (#6234) + + commit 44ff7aa92ba7f716abe96c29876b2ea145a22c66 + Author: Mohammed Keyvanzadeh + Date: Fri Apr 21 18:56:31 2023 +0330 + + [check.yml] update version of "upload" action (#6231) + + Update the `actions/upload-artifact` action to version 3. + + commit 413b147b0f48ea87606e0b7fbc107c8316b98fc3 + Author: Detlef Riekenberg + Date: Thu Apr 27 04:00:32 2023 +0200 + + [compliance, headers.cpp.fs] Fix subclause name for cstddef (#6227) + + commit 82ecf4355a016847ffcf778abfcf1fe96d02fc79 + Author: Arthur O'Dwyer + Date: Sun Apr 30 07:56:10 2023 -0400 + + [flat.map.modifiers] Fix erroneous "try_emplace_hint" (#6238) + + The hint-taking operation is instead an overload of try_emplace. + + commit 9568c66abd12eadd696b9f16bb4884908e2aad66 + Author: Daniel Krügler + Date: Sun Apr 30 13:57:23 2023 +0200 + + [ranges] Remove "inline" from variable templates (#6218) + + commit bdd25a63a8a84a1183ebc125dac132d0572f67fd + Author: Alisdair Meredith + Date: Sun Apr 30 08:02:42 2023 -0400 + + [iterator.concept.winc] Improve implementation-defined text (#6228) + + commit 057da6c79e35cc4cdebaa5a6096738f273c6c2e8 + Author: tocic + Date: Wed Sep 28 13:14:14 2022 +0300 + + [back, macros] Fix inconsistent hyphenation of "cross-reference" + + commit d1e109e43d7625f4a4ebb6a045fc68a275fca611 + Author: tocic + Date: Wed Sep 28 13:19:36 2022 +0300 + + [std] Fix inconsistent hyphenation of "multidimensional" + + commit bf9edb92183b34421dd6e02474f2ac943fd7cea3 + Author: tocic + Date: Fri Apr 7 13:56:59 2023 +0300 + + [diff.cpp17.temp] Fix inconsistent hyphenation of "well-formed" + + commit 62cd54aedecb8bf152e80b1aced64d80e0b8bff6 + Author: tocic + Date: Fri Apr 7 13:57:28 2023 +0300 + + [diff.cpp17.depr] Fix inconsistent hyphenation of "well-defined" + + commit 57ad77984fd2e07c90b1bb8ca34125452688031a + Author: tocic + Date: Fri Apr 7 13:51:09 2023 +0300 + + [fs.path.type.cvt] Fix inconsistent hyphenation of "error-prone" + + commit e16a651b7d6f490e9ffe003c9ca382970c478c1d + Author: tocic + Date: Fri Apr 7 13:45:39 2023 +0300 + + [filesystems] Fix inconsistent hyphenation of "subdirectory" + + commit f52423c2a4d60d0ad653a3c8e2895037df016db0 + Author: Thomas Köppe + Date: Sun Apr 30 14:07:51 2023 +0100 + + [format.string.std] Clarify how an integer is interpreted + + commit 62d7d5a2e51d63d676cc93bfe69d4d55ea635983 + Author: Thomas Köppe + Date: Sun Apr 30 14:15:35 2023 +0100 + + [class.{default,copy}.ctor] Use new term "constexpr-suitable". + + As of CWG2602 (ce7d8b0360e1509de6f7fd073d0a091238b1326f), the term + "constexpr-suitable" replaces the previous phrase "satisfy the + requirements for a constexpr function". + + commit 696ddeb2b28b48efaffa93b881ff667d85d0a457 + Author: Thomas Köppe + Date: Sun Apr 30 14:22:32 2023 +0100 + + [time.duration.general] Use new term "constexpr-suitable". + + commit 79aef51943810dcf14654490fb6101bbc9e4a0f9 + Author: Thomas Köppe + Date: Sun Apr 30 14:23:05 2023 +0100 + + [pairs.pair, variant.ctor, tuple.cnstr] Use new term "constexpr-suitable". + + commit b6903b6fe23d06e23191e672ae287f0de0de472c + Author: Jens Maurer + Date: Mon May 1 09:47:08 2023 +0200 + + [cpp.predefined] Add __cpp_auto_cast + + commit 8f946881355fbbe031a325168078b2925e029bba + Author: xmh0511 <970252187@qq.com> + Date: Tue May 2 01:31:02 2023 +0800 + + [temp.variadic] Change "init-capture pack" to "init-capture pack declaration" + + commit b81e4be37c5f7a4d374546a72bfc82c96601aee2 + Author: Jonathan Wakely + Date: Fri May 5 12:01:05 2023 +0100 + + [container.alloc.reqmts] Fix incorrect change of \mandates to \expects + + This was incorrectly changed from a \mandates to an \expects when + 93ff092d1cd2b335f372b9546365b3d495caf2d8 replaced the requirements + tables. + + commit 7003252f4db8b388dd097790b374ffed3be1ff56 + Author: Arthur O'Dwyer + Date: Sun May 7 16:27:19 2023 -0400 + + [flat.map.cons] Close an angle bracket (#6245) + + commit e7492cef7f930089e009913bff6ac30f41d6165e + Author: Thomas Köppe + Date: Sat May 6 02:47:07 2023 +0100 + + [format] Fix presentation of whitespace; use \caret + + commit f8f5b8b564a785297a43b6b823b521e5adc79fb9 + Author: Arthur O'Dwyer + Date: Mon May 8 14:30:31 2023 -0400 + + [flat.map.modifiers] "Arg..." should be "Args..." (#6249) + + commit 02545c761c7f6c9e336c6badf8660b2baf4ac627 + Author: Arthur O'Dwyer + Date: Tue May 9 13:25:42 2023 -0400 + + [flat.set.modifiers] `(first, last)` should be `rg` (#6246) + + Restore consistency with [flat.map.modifiers]/13, which already uses `ranges::distance(rg)`. diff --git a/papers/wd-index.md b/papers/wd-index.md index f81e361401..abcbe32842 100644 --- a/papers/wd-index.md +++ b/papers/wd-index.md @@ -44,3 +44,4 @@ * [N4917](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4917.pdf) 2022-07 C++ Working Draft * [N4928](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4928.pdf) 2022-11 C++ Working Draft * [N4944](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4944.pdf) 2023-02 C++ Working Draft + * [N4950](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf) 2023-05 C++ Working Draft diff --git a/source/config.tex b/source/config.tex index 9e2197d124..d764e25075 100644 --- a/source/config.tex +++ b/source/config.tex @@ -1,9 +1,9 @@ %!TEX root = std.tex %%-------------------------------------------------- %% Version numbers -\newcommand{\docno}{Dxxxx} +\newcommand{\docno}{N4950} \newcommand{\prevdocno}{N4944} -\newcommand{\cppver}{202002L} +\newcommand{\cppver}{202302L} %% Release date \newcommand{\reldate}{\today}