From d5b632306a91833a3de6bd15ee75a559d49b76d6 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 16:32:47 -0700 Subject: [PATCH 01/44] LWG2414 Member function reentrancy should be implementation-defined --- source/lib-intro.tex | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/lib-intro.tex b/source/lib-intro.tex index abe4ecf3b7..7015762100 100644 --- a/source/lib-intro.tex +++ b/source/lib-intro.tex @@ -3787,6 +3787,16 @@ the \Cpp{} standard library may be recursively reentered} which functions in the \Cpp{} standard library may be recursively reentered. +\pnum +During the execution of +a standard library non-static member function $F$ on an object, +if that object is accessed through a glvalue that is not obtained, +directly or indirectly, +from the object parameter of $F$, +in a manner that can conflict\iref{intro.races} +with any access that $F$ is permitted to perform\iref{res.on.data.races}, +the behavior is undefined unless otherwise specified. + \rSec3[res.on.data.races]{Data race avoidance} \pnum From 66f3f6ec083760ed4c280b61039c2cfeb01b60d5 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 16:35:07 -0700 Subject: [PATCH 02/44] LWG2746 Inconsistency between requirements for emplace between optional and variant --- source/utilities.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/utilities.tex b/source/utilities.tex index 09be66f705..221c6edb66 100644 --- a/source/utilities.tex +++ b/source/utilities.tex @@ -3966,7 +3966,7 @@ \begin{itemdescr} \pnum -\mandates +\constraints \tcode{is_constructible_v} is \tcode{true}. \pnum From f459b2414fced894d97ef29237677b65709cc297 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 18:46:48 -0700 Subject: [PATCH 03/44] LWG3504 condition_variable::wait_for is overspecified --- source/threads.tex | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/source/threads.tex b/source/threads.tex index bfd7367295..cc8b8ec765 100644 --- a/source/threads.tex +++ b/source/threads.tex @@ -9490,6 +9490,16 @@ \pnum Condition variable construction and destruction need not be synchronized. +\pnum +The definitions in \ref{thread.condition} +make use of the following exposition-only function: +\begin{codeblock} +template + chrono::steady_clock::time_point @\exposid{rel-to-abs}@(const Dur& rel_time) + { return chrono::steady_clock::now() + + chrono::ceil(rel_time); } +\end{codeblock} + \rSec2[condition.variable.syn]{Header \tcode{} synopsis} \indexheader{condition_variable}% @@ -9836,7 +9846,7 @@ \effects Equivalent to: \begin{codeblock} -return wait_until(lock, chrono::steady_clock::now() + rel_time); +return wait_until(lock, @\exposid{rel-to-abs}@(rel_time)); \end{codeblock} \pnum @@ -9946,7 +9956,7 @@ \effects Equivalent to: \begin{codeblock} -return wait_until(lock, chrono::steady_clock::now() + rel_time, std::move(pred)); +return wait_until(lock, @\exposid{rel-to-abs}@(rel_time), std::move(pred)); \end{codeblock} \pnum @@ -10220,7 +10230,7 @@ \effects Equivalent to: \begin{codeblock} -return wait_until(lock, chrono::steady_clock::now() + rel_time); +return wait_until(lock, @\exposid{rel-to-abs}@(rel_time)); \end{codeblock} \pnum @@ -10288,7 +10298,7 @@ \effects Equivalent to: \begin{codeblock} -return wait_until(lock, chrono::steady_clock::now() + rel_time, std::move(pred)); +return wait_until(lock, @\exposid{rel-to-abs}@(rel_time), std::move(pred)); \end{codeblock} \end{itemdescr} @@ -10407,7 +10417,7 @@ \effects Equivalent to: \begin{codeblock} -return wait_until(lock, std::move(stoken), chrono::steady_clock::now() + rel_time, +return wait_until(lock, std::move(stoken), @\exposid{rel-to-abs}@(rel_time), std::move(pred)); \end{codeblock} \end{itemdescr} From fd289eba5dcabf0c7b14cc1f3888ba5416ec4927 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 19:00:38 -0700 Subject: [PATCH 04/44] CWG3599 The const overload of lazy_split_view::begin should be constrained by const Pattern --- source/ranges.tex | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/ranges.tex b/source/ranges.tex index 58f2ef0c01..18bed31c3c 100644 --- a/source/ranges.tex +++ b/source/ranges.tex @@ -7925,7 +7925,8 @@ } } - constexpr auto begin() const requires @\libconcept{forward_range}@ && @\libconcept{forward_range}@ { + constexpr auto begin() const requires @\libconcept{forward_range}@ && @\libconcept{forward_range}@ && + @\libconcept{forward_range}@ { return @\exposid{outer-iterator}@{*this, ranges::begin(@\exposid{base_}@)}; } @@ -7935,7 +7936,8 @@ } constexpr auto end() const { - if constexpr (@\libconcept{forward_range}@ && @\libconcept{forward_range}@ && @\libconcept{common_range}@) + if constexpr (@\libconcept{forward_range}@ && @\libconcept{forward_range}@ && @\libconcept{common_range}@ && + @\libconcept{forward_range}@) return @\exposid{outer-iterator}@{*this, ranges::end(@\exposid{base_}@)}; else return default_sentinel; From 32629161c1663a231f7c34ed9305cf92a3dbda8e Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 19:11:17 -0700 Subject: [PATCH 05/44] LWG4290 Missing Mandates clauses on is_sufficiently_aligned --- source/memory.tex | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/memory.tex b/source/memory.tex index a7f16411e8..1f290bbecb 100644 --- a/source/memory.tex +++ b/source/memory.tex @@ -1019,6 +1019,10 @@ \end{itemdecl} \begin{itemdescr} +\pnum +\mandates +Alignment is a power of two. + \pnum \expects \tcode{p} points to From 2260b2a7fdf54b76752117cb2235b5ebc3c27dd0 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 19:18:08 -0700 Subject: [PATCH 06/44] LWG4453 atomic_ref::required_alignment should be the same as for T [atomics.ref.ops]p3 Added "," to match wording added in p1. --- source/threads.tex | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/threads.tex b/source/threads.tex index cc8b8ec765..9d92168ca6 100644 --- a/source/threads.tex +++ b/source/threads.tex @@ -3237,6 +3237,9 @@ \pnum The alignment required for an object to be referenced by an atomic reference, which is at least \tcode{alignof(T)}. +For any type \tcode{U} similar to \tcode{T}, +the value of \tcode{required_alignment} +is the same as \tcode{atomic_ref>::required_alignment}. \pnum \begin{note} @@ -3260,6 +3263,9 @@ The static data member \tcode{is_always_lock_free} is \tcode{true} if the \tcode{atomic_ref} type's operations are always lock-free, and \tcode{false} otherwise. +For any type \tcode{U} similar to \tcode{T}, +the value of \tcode{is_always_lock_free} +is the same as \tcode{atomic_ref>::is_always_lock_free}. \end{itemdescr} \indexlibrarymember{is_lock_free}{atomic_ref}% From e8dfb74b683c42b6275193bcb9b3b626b1443e46 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 19:29:11 -0700 Subject: [PATCH 07/44] LWG4454 assert should forbid co_await and co_yield Fixes NB GB 05-129 (C++26 CD). --- source/diagnostics.tex | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/diagnostics.tex b/source/diagnostics.tex index 47be572caa..fc53cdb3bf 100644 --- a/source/diagnostics.tex +++ b/source/diagnostics.tex @@ -495,8 +495,11 @@ \pnum If \mname{VA_ARGS} does not expand to -an \grammarterm{assignment-expression}, +a well-formed \grammarterm{assignment-expression}, the program is ill-formed. +If such an \grammarterm{assignment-expression} is ill-formed when +treated as an unevaluated operand\iref{expr.await, expr.yield}, +the program is ill-formed, no diagnostic required. \pnum The macro \tcode{assert} is redefined according to From c4a72930de8504e04b57bc7bdd2c070ee90a1554 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 19:55:56 -0700 Subject: [PATCH 08/44] LWG4469 Names of parameters of addressable function shall remain unspecified --- source/lib-intro.tex | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/lib-intro.tex b/source/lib-intro.tex index 7015762100..264b436bcc 100644 --- a/source/lib-intro.tex +++ b/source/lib-intro.tex @@ -3103,6 +3103,14 @@ Unless \tcode{\placeholder{F}} is designated an addressable function, it is unspecified if or how a reflection value designating the associated entity can be formed. +For any value \tcode{\placeholder{p}} of type \tcode{meta::info} that +represents a reflection of a parameter of \tcode{\placeholder{F}}, +it is unspecified if \tcode{has_identifier(\placeholder{p})} +returns \tcode{true} or \tcode{false}, and +if \tcode{meta::has_identifier(\placeholder{p})} is \tcode{true}, then +the \ntmbs{} produced by +\tcode{meta::identifier_of(\placeholder{p})} and +\tcode{meta::u8identifier_of(\placeholder{p})} is unspecified. %FIXME: Why is this not an example, but a note that begins with "For example"? \begin{note} For example, it is possible that \tcode{std::meta::members_of} From b5910b5921ecc32cbf272605cf4d0dc79d6e2564 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 20:02:44 -0700 Subject: [PATCH 09/44] LWG4472 std::atomic_ref can be constructed from temporaries --- source/threads.tex | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/threads.tex b/source/threads.tex index 9d92168ca6..fdd9b62f74 100644 --- a/source/threads.tex +++ b/source/threads.tex @@ -3159,6 +3159,7 @@ bool is_lock_free() const noexcept; constexpr explicit atomic_ref(T&); + explicit atomic_ref(T&&) = delete; constexpr atomic_ref(const atomic_ref&) noexcept; template constexpr atomic_ref(const atomic_ref&) noexcept; @@ -3662,6 +3663,7 @@ bool is_lock_free() const noexcept; constexpr explicit atomic_ref(@\placeholder{integral-type}@&); + explicit atomic_ref(@\placeholder{integral-type}@&&) = delete; constexpr atomic_ref(const atomic_ref&) noexcept; template constexpr atomic_ref(const atomic_ref&) noexcept; @@ -3886,6 +3888,7 @@ bool is_lock_free() const noexcept; constexpr explicit atomic_ref(@\placeholder{floating-point-type}@&); + explicit atomic_ref(@\placeholder{floating-point-type}@&&) = delete; constexpr atomic_ref(const atomic_ref&) noexcept; template constexpr atomic_ref(const atomic_ref&) noexcept; @@ -4180,6 +4183,7 @@ bool is_lock_free() const noexcept; constexpr explicit atomic_ref(@\placeholder{pointer-type}@&); + explicit atomic_ref(@\placeholder{pointer-type}@&&) = delete; constexpr atomic_ref(const atomic_ref&) noexcept; template constexpr atomic_ref(const atomic_ref&) noexcept; From fe6d73ca43b1bbe459797ae618ffc8562632acbc Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 20:34:00 -0700 Subject: [PATCH 10/44] LWG4486 integral-constant-like and constexpr-wrapper-like exposition-only concept duplication Fixes NB US 151-242 (C++26 CD). --- source/containers.tex | 5 +---- source/lib-intro.tex | 7 +++++++ source/numerics.tex | 7 ------- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/source/containers.tex b/source/containers.tex index 89f3bca5fe..d16560cfd0 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -20392,10 +20392,7 @@ concept @\defexposconcept{integral-constant-like}@ = // \expos is_integral_v> && !is_same_v> && - @\libconcept{convertible_to}@ && - @\libconcept{equality_comparable_with}@ && - bool_constant::value && - bool_constant(T()) == T::value>::value; + @\exposconcept{constexpr-wrapper-like}@; template constexpr size_t @\defexposconcept{maybe-static-ext}@ = dynamic_extent; // \expos diff --git a/source/lib-intro.tex b/source/lib-intro.tex index 264b436bcc..2e4d71e566 100644 --- a/source/lib-intro.tex +++ b/source/lib-intro.tex @@ -564,6 +564,13 @@ template using @\exposidnc{synth-three-way-result}@ = // \expos decltype(@\exposidnc{synth-three-way}@(declval(), declval())); + + template + concept @\defexposconceptnc{constexpr-wrapper-like}@ = // \expos + @\libconcept{convertible_to}@ && + @\libconcept{equality_comparable_with}@ && + bool_constant::value && + bool_constant(T()) == T::value>::value; } \end{codeblock} diff --git a/source/numerics.tex b/source/numerics.tex index 31a2e217d6..b5a65c0c80 100644 --- a/source/numerics.tex +++ b/source/numerics.tex @@ -16544,13 +16544,6 @@ constexpr @\exposidnc{simd-size-type} \exposidnc{simd-size-v} = \seebelownc@; // \expos template constexpr size_t @\exposidnc{mask-element-size} = \seebelownc@; // \expos -template - concept @\defexposconceptnc{constexpr-wrapper-like}@ = // \expos - @\libconcept{convertible_to}@ && - @\libconcept{equality_comparable_with}@ && - bool_constant::value && - bool_constant(T()) == T::value>::value; - template concept @\defexposconceptnc{explicitly-convertible-to}@ = // \expos requires { From 6662593808d539126a7db6ae980d5d4133d19604 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 20:37:57 -0700 Subject: [PATCH 11/44] LWG4492 std::generate and std::ranges::generate wording is unclear for parallel algorithms --- source/algorithms.tex | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/source/algorithms.tex b/source/algorithms.tex index baf3e4f25f..039136eaf6 100644 --- a/source/algorithms.tex +++ b/source/algorithms.tex @@ -2316,16 +2316,6 @@ template<@\libconcept{input_or_output_iterator}@ O, @\libconcept{copy_constructible}@ F> requires @\libconcept{invocable}@ && @\libconcept{indirectly_writable}@> constexpr O generate_n(O first, iter_difference_t n, F gen); - template<@\exposconcept{execution-policy}@ Ep, @\libconcept{random_access_iterator}@ O, @\libconcept{sized_sentinel_for}@ S, - @\libconcept{copy_constructible}@ F> - requires @\libconcept{invocable}@ && @\libconcept{indirectly_writable}@> - O generate(Ep&& exec, O first, S last, F gen); // freestanding-deleted - template<@\exposconcept{execution-policy}@ Ep, @\exposconcept{sized-random-access-range}@ R, @\libconcept{copy_constructible}@ F> - requires @\libconcept{invocable}@ && @\libconcept{indirectly_writable}@, invoke_result_t> - borrowed_iterator_t generate(Ep&& exec, R&& r, F gen); // freestanding-deleted - template<@\exposconcept{execution-policy}@ Ep, @\libconcept{random_access_iterator}@ O, @\libconcept{copy_constructible}@ F> - requires @\libconcept{invocable}@ && @\libconcept{indirectly_writable}@> - O generate_n(Ep&& exec, O first, iter_difference_t n, F gen); // freestanding-deleted } // \ref{alg.remove}, remove @@ -7492,17 +7482,6 @@ template<@\libconcept{input_or_output_iterator}@ O, @\libconcept{copy_constructible}@ F> requires @\libconcept{invocable}@ && @\libconcept{indirectly_writable}@> constexpr O ranges::generate_n(O first, iter_difference_t n, F gen); - -template<@\exposconcept{execution-policy}@ Ep, @\libconcept{random_access_iterator}@ O, @\libconcept{sized_sentinel_for}@ S, - @\libconcept{copy_constructible}@ F> - requires @\libconcept{invocable}@ && @\libconcept{indirectly_writable}@> - O ranges::generate(Ep&& exec, O first, S last, F gen); -template<@\exposconcept{execution-policy}@ Ep, @\exposconcept{sized-random-access-range}@ R, @\libconcept{copy_constructible}@ F> - requires @\libconcept{invocable}@ && @\libconcept{indirectly_writable}@, invoke_result_t> - borrowed_iterator_t ranges::generate(Ep&& exec, R&& r, F gen); -template<@\exposconcept{execution-policy}@ Ep, @\libconcept{random_access_iterator}@ O, @\libconcept{copy_constructible}@ F> - requires @\libconcept{invocable}@ && @\libconcept{indirectly_writable}@> - O ranges::generate_n(Ep&& exec, O first, iter_difference_t n, F gen); \end{itemdecl} \begin{itemdescr} From 32bf97691e11436afa45cd198a3bd902b3ada5f9 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 20:45:44 -0700 Subject: [PATCH 12/44] LWG4496 Precedes vs Reachable in [meta.reflection] --- source/meta.tex | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/source/meta.tex b/source/meta.tex index c76fa23ee5..a6b3ef6c77 100644 --- a/source/meta.tex +++ b/source/meta.tex @@ -3815,7 +3815,7 @@ Otherwise, if \tcode{r} represents the parameter $P$ of a function $F$, then let $S$ be the set of declarations, ignoring any explicit instantiations, - that precede some point in the evaluation context + that are reachable from a point in the evaluation context and that declare either $F$ or a templated function of which $F$ is a specialization; \tcode{true} if @@ -3901,7 +3901,7 @@ Otherwise, if \tcode{r} represents the parameter $P$ of a function $F$, then let $S$ be the set of declarations, ignoring any explicit instantiations, - that precede some point in the evaluation context + that are reachable from a point in the evaluation context and that declare either $F$ or a templated function of which $F$ is a specialization; the name that was introduced by a declaration in $S$ @@ -4030,7 +4030,7 @@ \begin{itemize} \item If $E$ is defined by a declaration $D$ - that precedes a point $P$ in the evaluation context + that is reachable from a point $P$ in the evaluation context and $P$ does not occur within an \grammarterm{enum-specifier} of $D$, then a reflection of $E$. \item @@ -4662,13 +4662,13 @@ \item If $F$ is a specialization of a templated function $T$, then \tcode{true} if there exists a declaration $D$ of $T$ - that precedes some point in the evaluation context + that is reachable from a point in the evaluation context and $D$ specifies a default argument for the parameter of $T$ corresponding to $P$. Otherwise, \tcode{false}. \item Otherwise, if there exists a declaration $D$ of $F$ - that precedes some point in the evaluation context + that is reachable from a point in the evaluation context and $D$ specifies a default argument for $P$, then \tcode{true}. \end{itemize} @@ -5985,8 +5985,9 @@ \pnum \returns A \tcode{vector} containing all of the reflections $R$ -representing each annotation applying to each declaration of $E$ that precedes either -some point in the evaluation context\iref{expr.const.reflect} or +representing each annotation applying to each declaration of $E$ +that is reachable from either +a point in the evaluation context\iref{expr.const.reflect} or a point immediately following the \grammarterm{class-specifier} of the outermost class for which such a point is in a complete-class context. For any two reflections $R_1$ and $R_2$ in the returned \tcode{vector}, From a8c86317971b7905aa38a17e66529e8a8f5e1251 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 20:49:33 -0700 Subject: [PATCH 13/44] LWG4499 flat_set::insert_range specification may be problematic --- source/containers.tex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/containers.tex b/source/containers.tex index d16560cfd0..6a9e9cf569 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -19494,8 +19494,8 @@ \effects Adds elements to \exposid{c} as if by: \begin{codeblock} -ranges::for_each(rg, [&](auto&& e) { - @\exposid{c}@.insert(@\exposid{c}@.end(), std::forward(e)); +ranges::for_each(rg, [&](value_type e) { + @\exposid{c}@.insert(@\exposid{c}@.end(), std::move(e)); }); \end{codeblock} Then, @@ -20182,8 +20182,8 @@ \effects Adds elements to \exposid{c} as if by: \begin{codeblock} -ranges::for_each(rg, [&](auto&& e) { - @\exposid{c}@.insert(@\exposid{c}@.end(), std::forward(e)); +ranges::for_each(rg, [&](value_type e) { + @\exposid{c}@.insert(@\exposid{c}@.end(), std::move(e)); }); \end{codeblock} Then, sorts the range of newly inserted elements with respect to \exposid{compare}, From ecf1b9926c96be0fadd2a1064b92da26ae362606 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 20:52:18 -0700 Subject: [PATCH 14/44] LWG4510 Ambiguity of std::ranges::advance and std::ranges::next when the difference type is also a sentinel type --- source/iterators.tex | 1 + 1 file changed, 1 insertion(+) diff --git a/source/iterators.tex b/source/iterators.tex index 9e972f19ae..7d97d4395a 100644 --- a/source/iterators.tex +++ b/source/iterators.tex @@ -1675,6 +1675,7 @@ template concept @\deflibconcept{sentinel_for}@ = @\libconcept{semiregular}@ && + !@\exposid{is-integer-like}@ && @\libconcept{input_or_output_iterator}@ && @\exposconcept{weakly-equality-comparable-with}@; // see \ref{concept.equalitycomparable} \end{itemdecl} From cc9877763173e381b4ac89f0e4f3cca385e28199 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 21:02:08 -0700 Subject: [PATCH 15/44] LWG4511 Inconsistency between the deduction guide of std::mdspan taking (data_handle_type, mapping_type, accessor_type) and the corresponding constructor --- source/containers.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/containers.tex b/source/containers.tex index 6a9e9cf569..cbd0964204 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -25030,7 +25030,7 @@ typename MappingType::layout_type>; template - mdspan(const typename AccessorType::data_handle_type&, const MappingType&, + mdspan(typename AccessorType::data_handle_type, const MappingType&, const AccessorType&) -> mdspan; From 2123003100e4e3ae107ead8a0ab0397b648e8884 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 21:11:39 -0700 Subject: [PATCH 16/44] LWG4512 The system_encoded_string() and generic_system_encoded_string() member functions of std::filesystem::path are misnamed Fixes NB US 189-304 (C++26 CD). --- source/future.tex | 4 ++-- source/iostreams.tex | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/source/future.tex b/source/future.tex index 14b1e41efe..a8772f6647 100644 --- a/source/future.tex +++ b/source/future.tex @@ -929,7 +929,7 @@ \begin{itemdescr} \pnum \returns -\tcode{system_encoded_string()}. +\tcode{native_encoded_string()}. \end{itemdescr} \indexlibrarymember{generic_string}{path}% @@ -940,7 +940,7 @@ \begin{itemdescr} \pnum \returns -\tcode{generic_system_encoded_string()}. +\tcode{generic_native_encoded_string()}. \end{itemdescr} \rSec1[depr.atomics]{Deprecated atomic operations} diff --git a/source/iostreams.tex b/source/iostreams.tex index 2ec4c6445e..a430c8dc69 100644 --- a/source/iostreams.tex +++ b/source/iostreams.tex @@ -13717,7 +13717,7 @@ basic_string string(const Allocator& a = Allocator()) const; std::string display_string() const; - std::string system_encoded_string() const; + std::string native_encoded_string() const; std::wstring wstring() const; std::u8string u8string() const; std::u16string u16string() const; @@ -13729,7 +13729,7 @@ basic_string generic_string(const Allocator& a = Allocator()) const; std::string generic_display_string() const; - std::string generic_system_encoded_string() const; + std::string generic_native_encoded_string() const; std::wstring generic_wstring() const; std::u8string generic_u8string() const; std::u16string generic_u16string() const; @@ -14051,7 +14051,8 @@ so no conversion from \tcode{char} value type arguments or to \tcode{char} value type return values is performed. For Windows-based operating systems, the -native ordinary encoding is determined by calling a Windows API function. +native ordinary encoding is determined by +the current locale encoding and the Windows \tcode{AreFileApisANSI} function. \end{note} \begin{note} This results in behavior identical to other C and \Cpp{} @@ -14704,7 +14705,7 @@ \indexlibrarymember{u16string}{path}% \indexlibrarymember{u32string}{path}% \begin{itemdecl} -std::string system_encoded_string() const; +std::string native_encoded_string() const; std::wstring wstring() const; std::u8string u8string() const; std::u16string u16string() const; @@ -14779,7 +14780,7 @@ \indexlibrarymember{generic_u16string}{path}% \indexlibrarymember{generic_u32string}{path}% \begin{itemdecl} -std::string generic_system_encoded_string() const; +std::string generic_native_encoded_string() const; std::wstring generic_wstring() const; std::u8string generic_u8string() const; std::u16string generic_u16string() const; From cd9953e791903714c6c917e9cc000111b48988de Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 21:16:21 -0700 Subject: [PATCH 17/44] LWG4535 Disallow user specialization of templates Fixes NB US 176-280 (C++26 CD). --- source/numerics.tex | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/numerics.tex b/source/numerics.tex index b5a65c0c80..0555a77696 100644 --- a/source/numerics.tex +++ b/source/numerics.tex @@ -16534,6 +16534,11 @@ \tcode{T} is \defn{value-preserving} if all possible values of \tcode{U} can be represented with type \tcode{T}. +\pnum +If a program declares an explicit or partial specialization of +any of the templates specified in subclause \ref{simd}, +the program is ill-formed, no diagnostic required. + \rSec2[simd.expos]{Exposition-only types, variables, and concepts} \begin{codeblock} @@ -17484,10 +17489,6 @@ (converting) loads and stores for the given type \tcode{T} on arrays of type \tcode{U}. \end{note} - -\pnum -The behavior of a program that adds specializations for \tcode{alignment} -is undefined. \end{itemdescr} \indexlibrarymember{rebind}{simd} From 7fed466fdc06fb0ee07f75bebe5e82db0f3c3c54 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 21:36:11 -0700 Subject: [PATCH 18/44] LWG4536 Type traits have inconsistent interactions with immediate functions --- source/meta.tex | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/source/meta.tex b/source/meta.tex index a6b3ef6c77..ac26009293 100644 --- a/source/meta.tex +++ b/source/meta.tex @@ -1548,6 +1548,8 @@ the initialization \tcode{T t(\exposidnc{VAL});} is well-formed and binds \tcode{t} to a temporary object whose lifetime is extended\iref{class.temporary}. + The full-expression of the variable initialization is + treated as an unevaluated operand\iref{expr.context}. Access checking is performed as if in a context unrelated to \tcode{T} and \tcode{U}. Only the validity of the immediate context of @@ -1571,6 +1573,8 @@ the initialization \tcode{T t = \exposidnc{VAL};} is well-formed and binds \tcode{t} to a temporary object whose lifetime is extended\iref{class.temporary}. + The full-expression of the variable initialization is + treated as an unevaluated operand\iref{expr.context}. Access checking is performed as if in a context unrelated to \tcode{T} and \tcode{U}. Only the validity of the immediate context of @@ -1639,6 +1643,8 @@ \begin{note} These tokens are never interpreted as a function declaration. \end{note} +The full-expression of the variable initialization is +treated as an unevaluated operand\iref{expr.context}. Access checking is performed as if in a context unrelated to \tcode{T} and any of the \tcode{Args}. Only the validity of the immediate context of the variable initialization is considered. @@ -1937,7 +1943,8 @@ \indexlibraryglobal{is_convertible}% \pnum The predicate condition for a template specialization \tcode{is_convertible} -shall be satisfied if and only if the return expression in the following code would be +shall be satisfied if and only if +the return statement\iref{stmt.return} in the following code would be well-formed, including any implicit conversions to the return type of the function: \begin{codeblock} @@ -1951,9 +1958,11 @@ array types, function types, and \cv{}~\keyword{void}. \end{note} Access checking is performed -in a context unrelated to \tcode{To} and \tcode{From}. Only the validity of -the immediate context of the \grammarterm{expression} of the \tcode{return} statement\iref{stmt.return} -(including initialization of the returned object or reference) is considered. +in a context unrelated to \tcode{To} and \tcode{From}. +The operand of the \tcode{return} statement +(including initialization of the returned object or reference, if any) +is treated as an unevaluated operand\iref{expr.context}, and +only the validity of its immediate context is considered. \begin{note} The initialization can result in side effects such as the From a1024762b805419b7d6058c12f7c87acb5ca670a Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 22:29:38 -0700 Subject: [PATCH 19/44] LWG3831 Two-digit formatting of negative year is ambiguous [tab:time.format.spec],[tab:time.parse.spec] Fixed wording and formatting in examples --- source/time.tex | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/source/time.tex b/source/time.tex index fa46de5bfb..ebb95ffed6 100644 --- a/source/time.tex +++ b/source/time.tex @@ -10788,11 +10788,17 @@ the locale's alternate time representation. \\ \rowsep \tcode{\%y} & -The last two decimal digits of the year. +The last two decimal digits of the year, +regardless of the sign of the year. If the result is a single digit, it is prefixed by \tcode{0}. The modified command \tcode{\%Oy} produces the locale's alternative representation. The modified command \tcode{\%Ey} produces the locale's alternative representation of offset from \tcode{\%EC} (year only). +\begin{tailexample} +\begin{codeblock} +cout << format("{:%C %y}", -1976y); // prints \tcode{-20 76} +\end{codeblock} +\end{tailexample} \\ \rowsep \tcode{\%Y} & The year as a decimal number. @@ -11465,7 +11471,8 @@ The modified command \tcode{\%EX} interprets the locale's alternate time representation. \\ \rowsep \tcode{\%y} & -The last two decimal digits of the year. +The last two decimal digits of the year, +regardless of the sign of the year. If the century is not otherwise specified (e.g., with \tcode{\%C}), values in the range \crange{69}{99} @@ -11478,6 +11485,12 @@ Leading zeroes are permitted but not required. The modified commands \tcode{\%Ey} and \tcode{\%Oy} interpret the locale's alternative representation. +\begin{tailexample} +\begin{codeblock} +year y; +istringstream{"-20 76"} >> parse("%3C %y", y); // results in \tcode{y == -1976y} being \tcode{true} +\end{codeblock} +\end{tailexample} \\ \rowsep \tcode{\%Y} & The year as a decimal number. From 3cdb19bb065f2495e6a2d8775d368d2a00c457d5 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 22:47:07 -0700 Subject: [PATCH 20/44] LWG4090 Underspecified use of locale facets for locale-dependent std::format --- source/text.tex | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/source/text.tex b/source/text.tex index df0dc1baea..2de7d40362 100644 --- a/source/text.tex +++ b/source/text.tex @@ -6394,19 +6394,31 @@ \item For integral types, the locale-specific form causes the context's locale to be used -to insert the appropriate digit group separator characters. +to insert the appropriate digit group separator characters +as if obtained with +\tcode{numpunct::grouping} and +\tcode{numpunct::thousands_sep}. \item For floating-point types, the locale-specific form causes the context's locale to be used -to insert the appropriate digit group and radix separator characters. +to insert the appropriate digit group and radix separator characters +as if obtained with +\tcode{numpunct::grouping}, +\tcode{numpunct::thousands_sep}, and +\tcode{numpunct::decimal_point}. \item For the textual representation of \tcode{bool}, the locale-specific form causes the context's locale to be used to insert the appropriate string as if obtained -with \tcode{numpunct::truename} or \tcode{numpunct::falsename}. +with \tcode{numpunct::truename} or \tcode{numpunct::\brk{}falsename}. \end{itemize} +If the string literal encoding is a Unicode encoding form and +the locale is among an implementation-defined set of locales, +each replacement that depends on the locale is performed as if +the replacement character sequence is converted to +the string literal encoding. \pnum The \fmtgrammarterm{type} determines how the data should be presented. From 865861d57fb6b3d444e4850d7503033d7d2e72ba Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 22:51:21 -0700 Subject: [PATCH 21/44] LWG4130 Preconditions for std::launder might be overly strict --- source/support.tex | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/source/support.tex b/source/support.tex index 203a1bf45f..4d866b4338 100644 --- a/source/support.tex +++ b/source/support.tex @@ -3143,9 +3143,12 @@ \pnum \expects \tcode{p} represents the address \placeholder{A} of a byte in memory. -An object \placeholder{X} that is within its lifetime\iref{basic.life} -and whose type is similar\iref{conv.qual} to \tcode{T} -is located at the address \placeholder{A}. +An object \placeholder{X} +whose type is similar\iref{conv.qual} to \tcode{T} +is located at the address \placeholder{A}, and +is either within its lifetime\iref{basic.life} or +is an array element subobject +whose containing array object is within its lifetime. All bytes of storage that would be reachable through\iref{basic.compound} the result are reachable through \tcode{p}. From bdffae9e03a62412cdbb2fbe8bedcd9d1f6678b1 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 22:56:55 -0700 Subject: [PATCH 22/44] LWG4259 P1148R0 changed the return values of searching functions of std::basic_string on some platforms --- source/strings.tex | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/strings.tex b/source/strings.tex index 3bc1e0268a..025aeb4067 100644 --- a/source/strings.tex +++ b/source/strings.tex @@ -4443,7 +4443,10 @@ Equivalent to: \begin{codeblock} basic_string_view s = *this, sv = t; -return s.@\placeholder{G}@(sv, pos); +if (auto result = s.@\placeholder{G}@(sv, pos); result == s.npos) + return npos; +else + return result; \end{codeblock} \pnum From 9e936ca2e6f143e873edd00e6947e893a61d19e5 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 22:58:57 -0700 Subject: [PATCH 23/44] LWG4324 unique_ptr::operator* is not SFINAE-friendly --- source/memory.tex | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/memory.tex b/source/memory.tex index 1f290bbecb..c4ff8b920c 100644 --- a/source/memory.tex +++ b/source/memory.tex @@ -2641,6 +2641,10 @@ \end{itemdecl} \begin{itemdescr} +\pnum +\constraints +\tcode{*declval()} is a well-formed expression. + \pnum \mandates \tcode{reference_converts_from_temporary_v, decltype(\linebreak{}*declval())>} is \tcode{false}. From 074f180809f8722015584926df1503b3cca1d2d9 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 23:06:10 -0700 Subject: [PATCH 24/44] LWG4378 Inconsistency between std::basic_string's data() and operator[] specification --- source/strings.tex | 34 ++++------------------------------ 1 file changed, 4 insertions(+), 30 deletions(-) diff --git a/source/strings.tex b/source/strings.tex index 025aeb4067..3fd210ff1a 100644 --- a/source/strings.tex +++ b/source/strings.tex @@ -2014,6 +2014,8 @@ \tcode{data() + size()} points at an object with value \tcode{charT()} (a ``null terminator''\indextext{string!null terminator}), and \tcode{size() <= capacity()} is \tcode{true}. +The program has undefined behavior if +the null terminator is modified to any value other than \tcode{charT()}. \indexlibraryglobal{basic_string}% @@ -3101,10 +3103,7 @@ \pnum \returns -\tcode{*(begin() + pos)} if \tcode{pos < size()}. Otherwise, -returns a reference to an object of type \tcode{charT} with value -\tcode{charT()}, where modifying the object to any value other than -\tcode{charT()} leads to undefined behavior. +\tcode{data()[pos]}. \pnum \throws @@ -4291,42 +4290,17 @@ \begin{itemdecl} constexpr const charT* c_str() const noexcept; constexpr const charT* data() const noexcept; -\end{itemdecl} - -\begin{itemdescr} -\pnum -\returns -A pointer \tcode{p} such that \tcode{p + i == addressof(operator[](i))} for each -\tcode{i} in \crange{0}{size()}. - -\pnum -\complexity -Constant time. - -\pnum -\remarks -The program shall not modify any of the values stored in the character array; otherwise, the behavior is undefined. -\end{itemdescr} - -\indexlibrarymember{data}{basic_string}% -\begin{itemdecl} constexpr charT* data() noexcept; \end{itemdecl} \begin{itemdescr} \pnum \returns -A pointer \tcode{p} such that \tcode{p + i == addressof(operator[](i))} for each -\tcode{i} in \crange{0}{size()}. +\tcode{to_address(begin())}. \pnum \complexity Constant time. - -\pnum -\remarks -The program shall not modify the value stored at \tcode{p + size()} -to any value other than \tcode{charT()}; otherwise, the behavior is undefined. \end{itemdescr} \indexlibrarymember{operator basic_string_view}{basic_string}% From eba8f61ab2998ee7a4f70b1d43738e2ad26aab9e Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 23:12:48 -0700 Subject: [PATCH 25/44] LWG4457 freestanding for stable_sort, stable_partition and inplace_merge Fixes NB US 157-255 (C++26 CD). --- source/algorithms.tex | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/algorithms.tex b/source/algorithms.tex index 039136eaf6..0c5d2b5cb6 100644 --- a/source/algorithms.tex +++ b/source/algorithms.tex @@ -2847,12 +2847,12 @@ class Comp = ranges::less, class Proj = identity> requires @\libconcept{sortable}@ I stable_sort(Ep&& exec, I first, S last, Comp comp = {}, - Proj proj = {}); // freestanding-deleted + Proj proj = {}); // hosted template<@\exposconcept{execution-policy}@ Ep, @\exposconcept{sized-random-access-range}@ R, class Comp = ranges::less, class Proj = identity> requires @\libconcept{sortable}@, Comp, Proj> borrowed_iterator_t - stable_sort(Ep&& exec, R&& r, Comp comp = {}, Proj proj = {}); // freestanding-deleted + stable_sort(Ep&& exec, R&& r, Comp comp = {}, Proj proj = {}); // hosted } template @@ -3251,12 +3251,12 @@ requires @\libconcept{permutable}@ subrange stable_partition(Ep&& exec, I first, S last, Pred pred, - Proj proj = {}); // freestanding-deleted + Proj proj = {}); // hosted template<@\exposconcept{execution-policy}@ Ep, @\exposconcept{sized-random-access-range}@ R, class Proj = identity, @\libconcept{indirect_unary_predicate}@, Proj>> Pred> requires @\libconcept{permutable}@> borrowed_subrange_t - stable_partition(Ep&& exec, R&& r, Pred pred, Proj proj = {}); // freestanding-deleted + stable_partition(Ep&& exec, R&& r, Pred pred, Proj proj = {}); // hosted } template requires @\libconcept{sortable}@ I inplace_merge(Ep&& exec, I first, I middle, S last, Comp comp = {}, - Proj proj = {}); // freestanding-deleted + Proj proj = {}); // hosted template<@\exposconcept{execution-policy}@ Ep, @\exposconcept{sized-random-access-range}@ R, class Comp = ranges::less, class Proj = identity> requires @\libconcept{sortable}@, Comp, Proj> borrowed_iterator_t inplace_merge(Ep&& exec, R&& r, iterator_t middle, Comp comp = {}, - Proj proj = {}); // freestanding-deleted + Proj proj = {}); // hosted } // \ref{alg.set.operations}, set operations From c4bab846eb711ce8baecf7e210f394d0d41b1b62 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 23:18:46 -0700 Subject: [PATCH 26/44] LWG4460 Missing Throws: for last variant constructor --- source/utilities.tex | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/source/utilities.tex b/source/utilities.tex index 221c6edb66..e68ddb5a61 100644 --- a/source/utilities.tex +++ b/source/utilities.tex @@ -5925,7 +5925,8 @@ \pnum \throws -Any exception thrown by direct-initializing any $\tcode{T}_i$ for all $i$. +Any exception thrown by +the initialization of the contained value. \pnum \remarks @@ -5956,7 +5957,8 @@ \pnum \throws -Any exception thrown by move-constructing any $\tcode{T}_i$ for all $i$. +Any exception thrown by +the initialization of the contained value. \pnum \remarks @@ -6024,7 +6026,8 @@ \pnum \throws -Any exception thrown by the initialization of the selected alternative $\tcode{T}_j$. +Any exception thrown by +the initialization of the contained value. \pnum \remarks @@ -6058,7 +6061,8 @@ \pnum \throws -Any exception thrown by calling the selected constructor of \tcode{T}. +Any exception thrown by +the initialization of the contained value. \pnum \remarks @@ -6091,7 +6095,8 @@ \pnum \throws -Any exception thrown by calling the selected constructor of \tcode{T}. +Any exception thrown by +the initialization of the contained value. \pnum \remarks @@ -6125,7 +6130,8 @@ \pnum \throws -Any exception thrown by calling the selected constructor of $\tcode{T}_I$. +Any exception thrown by +the initialization of the contained value. \pnum \remarks @@ -6158,6 +6164,11 @@ \ensures \tcode{index()} is \tcode{I}. +\pnum +\throws +Any exception thrown by +the initialization of the contained value. + \pnum \remarks If $\tcode{T}_I$'s selected constructor is a constexpr constructor, this From 7138a1de71a38daafb5d676d35ce21e6eb75a7ad Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 23:20:23 -0700 Subject: [PATCH 27/44] LWG4467 hive::splice can throw bad_alloc --- source/containers.tex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/containers.tex b/source/containers.tex index cbd0964204..83f3036ff1 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -8847,7 +8847,8 @@ \pnum \throws \tcode{length_error} if any of \tcode{x}'s active blocks -are not within the bounds of \exposid{current-limits}. +are not within the bounds of \exposid{current-limits}, +as well as any exceptions thrown by the allocator. \pnum \complexity From a67587577808e74bbdca7c3f430e6c60ddd7584b Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 23:22:50 -0700 Subject: [PATCH 28/44] LWG4468 [const.wrap.class] "operator decltype(auto)" is ill-formed --- source/meta.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/meta.tex b/source/meta.tex index ac26009293..1c978df0e6 100644 --- a/source/meta.tex +++ b/source/meta.tex @@ -863,7 +863,7 @@ constexpr auto operator=(R) const noexcept -> constant_wrapper { return {}; } - constexpr operator decltype(auto)() const noexcept { return value; } + constexpr operator decltype(value)() const noexcept { return value; } }; } \end{codeblock} From bc2c66913dd1b61fb333d732ee65a8dbadb0c1b3 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 23:36:52 -0700 Subject: [PATCH 29/44] LWG4474 "round_to_nearest" rounding mode is unclear --- source/support.tex | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/support.tex b/source/support.tex index 4d866b4338..4696bf0a74 100644 --- a/source/support.tex +++ b/source/support.tex @@ -997,7 +997,11 @@ \item \indexlibraryglobal{round_to_nearest}% \tcode{round_to_nearest} -if the rounding style is to the nearest representable value +if the rounding style is to the nearest representable value; +%FIXME: The wording "equally near" seems problematic. +if there are two equally near such values, +%FIXME: Can multiple values have an "even least significant digit"? Or none at all? +the one with an even least significant digit is chosen \item \indexlibraryglobal{round_toward_infinity}% \tcode{round_toward_infinity} From 6c9af3de7a329d07dfba68e4550398b3d7872662 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 23:41:07 -0700 Subject: [PATCH 30/44] LWG4477 Placement operator delete should be constexpr --- source/support.tex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/support.tex b/source/support.tex index 4696bf0a74..d8dae6f46e 100644 --- a/source/support.tex +++ b/source/support.tex @@ -2373,8 +2373,8 @@ constexpr void* operator new (std::size_t size, void* ptr) noexcept; constexpr void* operator new[](std::size_t size, void* ptr) noexcept; -void operator delete (void* ptr, void*) noexcept; -void operator delete[](void* ptr, void*) noexcept; +constexpr void operator delete (void* ptr, void*) noexcept; +constexpr void operator delete[](void* ptr, void*) noexcept; \end{codeblock} \rSec2[new.delete]{Storage allocation and deallocation} @@ -2944,7 +2944,7 @@ \indexlibrarymember{delete}{operator}% \begin{itemdecl} -void operator delete(void* ptr, void*) noexcept; +constexpr void operator delete(void* ptr, void*) noexcept; \end{itemdecl} \begin{itemdescr} @@ -2962,7 +2962,7 @@ \indexlibrarymember{delete}{operator}% \begin{itemdecl} -void operator delete[](void* ptr, void*) noexcept; +constexpr void operator delete[](void* ptr, void*) noexcept; \end{itemdecl} \begin{itemdescr} From edc506ea7782d900a952bb0370996e3ef4e70306 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 23:43:18 -0700 Subject: [PATCH 31/44] LWG4480 should provide ATOMIC_CHAR8_T_LOCK_FREE --- source/threads.tex | 1 + 1 file changed, 1 insertion(+) diff --git a/source/threads.tex b/source/threads.tex index fdd9b62f74..fa61b9da83 100644 --- a/source/threads.tex +++ b/source/threads.tex @@ -7097,6 +7097,7 @@ #define @\libmacro{ATOMIC_BOOL_LOCK_FREE}@ @\seebelow@ #define @\libmacro{ATOMIC_CHAR_LOCK_FREE}@ @\seebelow@ +#define @\libmacro{ATOMIC_CHAR8_T_LOCK_FREE}@ @\seebelow@ #define @\libmacro{ATOMIC_CHAR16_T_LOCK_FREE}@ @\seebelow@ #define @\libmacro{ATOMIC_CHAR32_T_LOCK_FREE}@ @\seebelow@ #define @\libmacro{ATOMIC_WCHAR_T_LOCK_FREE}@ @\seebelow@ From 7bcf512c23eff05df190041df77755498985e011 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Mon, 6 Apr 2026 23:47:24 -0700 Subject: [PATCH 32/44] LWG4481 Disallow chrono::duration --- source/time.tex | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/time.tex b/source/time.tex index ebb95ffed6..1b640d0657 100644 --- a/source/time.tex +++ b/source/time.tex @@ -1287,7 +1287,10 @@ \pnum \tcode{Rep} shall be an arithmetic type or a class emulating an arithmetic type. -If \tcode{duration} is instantiated with a \tcode{duration} type as the argument for the template +If a specialization of \tcode{duration} +is instantiated with +a cv-qualified type or a specialization of \tcode{duration} +as the argument for the template parameter \tcode{Rep}, the program is ill-formed. \pnum From 6da10310936e7e5c1e8f0d172e09ecb39fe22014 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Tue, 7 Apr 2026 01:02:21 -0700 Subject: [PATCH 33/44] LWG4483 Multidimensional arrays are not supported by meta::reflect_constant_array and related functions --- source/meta.tex | 57 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/source/meta.tex b/source/meta.tex index 1c978df0e6..79a5e2f4fa 100644 --- a/source/meta.tex +++ b/source/meta.tex @@ -3425,30 +3425,44 @@ \begin{itemdescr} \pnum -Let \tcode{T} be \tcode{ranges::range_value_t} and -$\tcode{\placeholder{e}}_i$ be \tcode{static_cast(*$\tcode{\placeholder{it}}_i$)}, -where $\tcode{\placeholder{it}}_i$ is an iterator to the $i^\text{th}$ element of \tcode{r}. +Let \tcode{U} be \tcode{ranges::range_value_t} and +\tcode{T} be \tcode{remove_all_extents_t}. \pnum \mandates -\tcode{T} is a structural type\iref{temp.param}, -\tcode{is_constructible_v>} is \tcode{true}, and -\tcode{T} satisfies \libconcept{copy_constructible}. +\begin{itemize} +\item \tcode{T} is a structural type\iref{temp.param}, +\item \tcode{T} satisfies \libconcept{copy_constructible}, and +\item +if \tcode{U} is not an array type, then +\tcode{is_constructible_v>} is \tcode{true}. +\end{itemize} \pnum Let $V$ be the pack of values of type \tcode{info} of the same size as \tcode{r}, where the $i^\text{th}$ element is -\tcode{reflect_constant($\tcode{\placeholder{e}}_i$)}. +\begin{itemize} +\item +\tcode{reflect_constant_array(*$\tcode{\placeholder{it}}_i$)} +if \tcode{U} is an array type, +\item +\tcode{reflect_constant(static_cast(*$\tcode{\placeholder{it}}_i$))} +otherwise, +\end{itemize} +and $\tcode{\placeholder{it}}_i$ is an iterator to +the $i^\text{th}$ element of \tcode{r}. \pnum Let $P$ be \begin{itemize} \item the template parameter object\iref{temp.param} - of type \tcode{const T[sizeof...(\brk{}$V$)]} - initialized with\linebreak - \tcode{\{[:$V$:]...\}} if \tcode{sizeof...($V$) > 0} is \tcode{true}, otherwise + of type \tcode{const T[sizeof...($V$)]}, + such that \tcode{$P$[$I$]} is template-argument-equivalent\iref{temp.type} + to the object represented by \tcode{$V$...[$I$]} + for all $I$ in the range \range{0}{sizeof...($V$)} + if \tcode{sizeof...($V$) > 0} is \tcode{true}, otherwise \item the template parameter object of type \tcode{const array} initialized with \tcode{\{\}}. @@ -3460,10 +3474,21 @@ \pnum \throws -Any exception thrown by the evaluation of any $\tcode{\placeholder{e}}_i$, or +Any of +\begin{itemize} +\item +an exception thrown by any operation +on \tcode{r} or +on iterators and sentinels referring to \tcode{r}, +\item +an exception thrown +by the evaluation of any argument of \tcode{reflect_constant} or +by any evaluation of \tcode{reflect_constant_array}, or +\item \tcode{meta::exception} -if evaluation of any \tcode{reflect_constant($\tcode{\placeholder{e}}_i$)} +if any invocation of \tcode{reflect_constant} would exit via an exception. +\end{itemize} \pnum \begin{note} @@ -3519,8 +3544,12 @@ Equivalent to: \begin{codeblock} using U = remove_cvref_t; -if constexpr (meta::is_class_type(^^U)) { - return addressof(meta::extract(meta::reflect_constant(std::forward(t)))); +if constexpr (meta::is_class_type(^^U) || meta::is_union_type(^^U)) { + return addressof(meta::extract( + meta::reflect_constant(std::forward(t)))); +} else if constexpr (meta::is_array_type(^^U)) { + return addressof(meta::extract( + meta::reflect_constant_array(std::forward(t)))); } else { return define_static_array(span(addressof(t), 1)).data(); } From ddefdcda157a68d0b27c1bcff60ef8d9427841db Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Tue, 7 Apr 2026 01:42:37 -0700 Subject: [PATCH 34/44] LWG4491 Rename submdspan_extents and submdspan_canonicalize_slices Fixes NB US 152-243, PL-008 (C++26 CD). --- source/containers.tex | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/source/containers.tex b/source/containers.tex index 83f3036ff1..e4ca851aa1 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -21287,12 +21287,12 @@ inline constexpr full_extent_t full_extent{}; template - constexpr auto submdspan_extents(const extents&, SliceSpecifiers...); + constexpr auto subextents(const extents&, SliceSpecifiers...); // \ref{mdspan.sub.canonical}, \tcode{submdspan} slice canonicalization template - constexpr auto submdspan_canonicalize_slices(const extents& src, - Slices... slices); + constexpr auto canonical_slices(const extents& src, + Slices... slices); // \ref{mdspan.sub.sub}, \tcode{submdspan} function template template - constexpr auto submdspan_canonicalize_slices(const extents& src, - SliceSpecifiers... slices); + constexpr auto canonical_slices(const extents& src, + SliceSpecifiers... slices); \end{itemdecl} \begin{itemdescr} @@ -25880,20 +25881,20 @@ \tcode{make_tuple(\exposid{canonical-slice}(slices)...)}. \end{itemdescr} -\rSec4[mdspan.sub.extents]{\tcode{submdspan_extents} function} +\rSec4[mdspan.sub.extents]{\tcode{subextents} function} -\indexlibraryglobal{submdspan_extents}% +\indexlibraryglobal{subextents}% \begin{itemdecl} template - constexpr auto submdspan_extents(const extents& src, - SliceSpecifiers... raw_slices); + constexpr auto subextents(const extents& src, + SliceSpecifiers... raw_slices); \end{itemdecl} \begin{itemdescr} \pnum Let \tcode{slices} be the pack introduced by the following declaration: \begin{codeblock} -auto [...slices] = submdspan_canonicalize_slices(src, raw_slices...); +auto [...slices] = canonical_slices(src, raw_slices...); \end{codeblock} \pnum @@ -26046,7 +26047,7 @@ An object \tcode{smr} of type \tcode{SMR} such that \begin{itemize} \item - \tcode{smr.mapping.extents() == submdspan_extents(m.extents(), valid_slices...)} + \tcode{smr.mapping.extents() == subextents(m.extents(), valid_slices...)} is \tcode{true};\newline and \item for each integer pack \tcode{i} @@ -26119,7 +26120,7 @@ \pnum Let \tcode{sub_ext} be -the result of \tcode{submdspan_extents(extents(), slices...)} and +the result of \tcode{subextents(extents(), slices...)} and let \tcode{SubExtents} be \tcode{decl\-type(sub_ext)}. \pnum @@ -26500,7 +26501,7 @@ \pnum Let \tcode{slices} be the pack introduced by the following declaration: \begin{codeblock} -auto [...slices] = submdspan_canonicalize_slices(src, raw_slices...); +auto [...slices] = canonical_slices(src, raw_slices...); \end{codeblock} \pnum From ab81391707c6a0685199dfce55c644fa55e37b69 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Tue, 7 Apr 2026 01:56:41 -0700 Subject: [PATCH 35/44] LWG4493 Specification for some functions of bit reference types seems missing --- source/containers.tex | 12 ++++++++++++ source/utilities.tex | 25 ++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/source/containers.tex b/source/containers.tex index e4ca851aa1..63cf29baa1 100644 --- a/source/containers.tex +++ b/source/containers.tex @@ -10652,6 +10652,18 @@ \tcode{*this}. \end{itemdescr} +\indexlibrarymember{operator bool}{vector::reference}% +\begin{itemdecl} +constexpr reference::operator bool() const noexcept; +\end{itemdecl} + +\begin{itemdescr} +\pnum +\returns +\tcode{true} if the value of the bit referred to by \tcode{*this} is one, +\tcode{false} otherwise. +\end{itemdescr} + \indexlibrarymember{flip}{vector::reference}% \begin{itemdecl} constexpr void reference::flip() noexcept; diff --git a/source/utilities.tex b/source/utilities.tex index e68ddb5a61..65ae79164f 100644 --- a/source/utilities.tex +++ b/source/utilities.tex @@ -10553,7 +10553,7 @@ constexpr reference& operator=(const reference& x) noexcept; // for \tcode{b[i] = b[j];} constexpr const reference& operator=(bool x) const noexcept; constexpr operator bool() const noexcept; // for \tcode{x = b[i];} - constexpr bool operator~() const noexcept; // flips the bit + constexpr bool operator~() const noexcept; constexpr reference& flip() noexcept; // for \tcode{b[i].flip();} friend constexpr void swap(reference x, reference y) noexcept; @@ -10698,6 +10698,29 @@ \tcode{*this}. \end{itemdescr} +\indexlibrarymember{operator bool}{bitset::reference}% +\begin{itemdecl} +constexpr reference::operator bool() const noexcept; +\end{itemdecl} + +\begin{itemdescr} +\pnum +\returns +\tcode{true} if the value of the bit referred to by \tcode{*this} is one, +\tcode{false} otherwise. +\end{itemdescr} + +\indexlibrarymember{operator~}{bitset::reference}% +\begin{itemdecl} +constexpr bool reference::operator~() const noexcept; +\end{itemdecl} + +\begin{itemdescr} +\pnum +\returns +\tcode{!bool(*this)}. +\end{itemdescr} + \indexlibrarymember{swap}{bitset::reference}% \begin{itemdecl} constexpr void swap(reference x, reference y) noexcept; From 907d0643d23d43c961aa1c7adf28342c8e9f2db8 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Tue, 7 Apr 2026 02:01:08 -0700 Subject: [PATCH 36/44] LWG4500 constant_wrapper wording problems --- source/meta.tex | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/meta.tex b/source/meta.tex index 79a5e2f4fa..1a3aff5d63 100644 --- a/source/meta.tex +++ b/source/meta.tex @@ -810,16 +810,16 @@ // pseudo-mutators template<@\exposconcept{constexpr-param}@ T> constexpr auto operator++(this T) noexcept - -> constant_wrapper<++Y> { return {}; } + -> constant_wrapper<(++T::value)> { return {}; } template<@\exposconcept{constexpr-param}@ T> constexpr auto operator++(this T, int) noexcept - -> constant_wrapper { return {}; } + -> constant_wrapper<(T::value++)> { return {}; } template<@\exposconcept{constexpr-param}@ T> constexpr auto operator--(this T) noexcept - -> constant_wrapper<--Y> { return {}; } + -> constant_wrapper<(--T::value)> { return {}; } template<@\exposconcept{constexpr-param}@ T> constexpr auto operator--(this T, int) noexcept - -> constant_wrapper { return {}; } + -> constant_wrapper<(T::value--)> { return {}; } template<@\exposconcept{constexpr-param}@ T, @\exposconcept{constexpr-param}@ R> constexpr auto operator+=(this T, R) noexcept @@ -861,7 +861,7 @@ template<@\exposconcept{constexpr-param}@ R> constexpr auto operator=(R) const noexcept - -> constant_wrapper { return {}; } + -> constant_wrapper<(X = R::value)> { return {}; } constexpr operator decltype(value)() const noexcept { return value; } }; From 7b4c8c9f34a608c71d5e532413eaee8c2260e734 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Tue, 7 Apr 2026 02:17:11 -0700 Subject: [PATCH 37/44] LWG4514 Missing absolute value of init in vector_two_norm and matrix_frob_norm --- source/numerics.tex | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/source/numerics.tex b/source/numerics.tex index 0555a77696..46bb6d73b8 100644 --- a/source/numerics.tex +++ b/source/numerics.tex @@ -13834,12 +13834,21 @@ \tcode{InVec::value_type} and \tcode{Scalar} are either a floating-point type, or a specialization of \tcode{complex}. Let \tcode{a} be -\tcode{\exposid{abs-if-needed}(declval())}. -Then, \tcode{decltype(\linebreak init + a * a} is convertible to \tcode{Scalar}. +\tcode{\exposid{abs-if-needed}(declval())} and +let \tcode{init_abs} be \tcode{\exposid{abs-if-needed}(init)}. +Then, \tcode{decltype(init_abs * init_abs + a * a)} +is convertible to \tcode{Scalar}. \pnum \returns -The square root of the sum of the square of \tcode{init} and the squares of the absolute values of the elements of \tcode{v}. +The square root of the sum +whose terms are the following: +\begin{itemize} +\item +the square of the absolute value of \tcode{init}, and +\item +the squares of the absolute values of the elements of \tcode{v}. +\end{itemize} \begin{note} For \tcode{init} equal to zero, this is the Euclidean norm (also called 2-norm) of the vector \tcode{v}. @@ -14032,17 +14041,24 @@ \pnum \mandates -\tcode{InVec::value_type} and \tcode{Scalar} are either a floating-point type, or +\tcode{InMat::value_type} and \tcode{Scalar} are either a floating-point type, or a specialization of \tcode{complex}. Let \tcode{a} be -\tcode{\exposid{abs-if-needed}(declval())}. -Then, \tcode{decltype(\linebreak init + a * a)} +\tcode{\exposid{abs-if-needed}(declval())} and +let \tcode{init_abs} be \tcode{\exposid{abs-if-needed}(init)}. +Then, \tcode{decltype(init_abs * init_abs + a * a)} is convertible to \tcode{Scalar}. \pnum \returns -The square root of the sum of squares -of \tcode{init} and the absolute values of the elements of \tcode{A}. +The square root of the sum +whose terms are the following: +\begin{itemize} +\item +the square of the absolute value of \tcode{init}, and +\item +the squares of the absolute values of the elements of \tcode{A}. +\end{itemize} \begin{note} For \tcode{init} equal to zero, this is the Frobenius norm of the matrix \tcode{A}. From 7dbbd7e1900e6605ab6771700644a4cac30532e3 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Tue, 7 Apr 2026 02:23:18 -0700 Subject: [PATCH 38/44] LWG4517 data_member_spec should throw for cv-qualified unnamed bit-fields --- source/meta.tex | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/meta.tex b/source/meta.tex index 1a3aff5d63..7e5ea0a8a2 100644 --- a/source/meta.tex +++ b/source/meta.tex @@ -6650,6 +6650,9 @@ \item if $V$ equals \tcode{0}, then \tcode{options.name} does not contain a value; and + \item + if \tcode{options.name} does not contain a value, then + \tcode{is_const(type) || is_volatile(type)} is \tcode{false}; and \end{itemize} \item if \tcode{options.alignment} contains a value, From 4279714c1b79bbab2e9623add9580ffe1785475a Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Tue, 7 Apr 2026 02:29:02 -0700 Subject: [PATCH 39/44] LWG4522 Clarify that std::format transcodes for std::wformat_strings --- source/text.tex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/text.tex b/source/text.tex index 2de7d40362..473255ae52 100644 --- a/source/text.tex +++ b/source/text.tex @@ -6446,7 +6446,9 @@ let \range{first}{last} be a range large enough to hold the \tcode{to_chars} output and \tcode{value} be the formatting argument value. -Formatting is done as if by calling \tcode{to_chars} as specified +Formatting is done as if by calling \tcode{to_chars} as specified, +transcoding the \tcode{to_chars} output to the wide literal encoding if +\tcode{charT} is \tcode{wchar_t}, and copying the output through the output iterator of the format context. \begin{note} Additional padding and adjustments are performed From 6e26db015aa139aefdc90ca9089fc69fab24a27a Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Tue, 7 Apr 2026 02:31:18 -0700 Subject: [PATCH 40/44] LWG4523 constant_wrapper should assign to value --- source/meta.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/meta.tex b/source/meta.tex index 7e5ea0a8a2..b2a168331b 100644 --- a/source/meta.tex +++ b/source/meta.tex @@ -861,7 +861,7 @@ template<@\exposconcept{constexpr-param}@ R> constexpr auto operator=(R) const noexcept - -> constant_wrapper<(X = R::value)> { return {}; } + -> constant_wrapper<(value = R::value)> { return {}; } constexpr operator decltype(value)() const noexcept { return value; } }; From 30a71cca8767ea043e0b63a14ca9fe26258b938d Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Tue, 7 Apr 2026 02:33:40 -0700 Subject: [PATCH 41/44] LWG4525 task's final_suspend should move the result --- source/exec.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/exec.tex b/source/exec.tex index 4455a1c991..6547c050ab 100644 --- a/source/exec.tex +++ b/source/exec.tex @@ -7568,7 +7568,7 @@ \tcode{set_value(std::move(\exposid{RCVR}(*this)))} if \tcode{is_void} is \tcode{true}, and otherwise \item - \tcode{set_value(std::move(\exposid{RCVR}(*this)), *\exposid{result})}. + \tcode{set_value(std::move(\exposid{RCVR}(*this)), std::move(*\exposid{result}))}. \end{itemize} \end{itemdescr} From 8a67cca5cb46168d51fdd5ea5b3c2b0ea868d1f0 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Tue, 7 Apr 2026 02:35:15 -0700 Subject: [PATCH 42/44] LWG4527 await_transform needs to use as_awaitable --- source/exec.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/exec.tex b/source/exec.tex index 6547c050ab..b53cdba51b 100644 --- a/source/exec.tex +++ b/source/exec.tex @@ -7617,7 +7617,7 @@ \effects Equivalent to: \begin{codeblock} -return await_transform(just(exchange(@\exposid{SCHED}@(*this), scheduler_type(sch.scheduler))), *this); +return as_awaitable(just(exchange(@\exposid{SCHED}@(*this), scheduler_type(sch.scheduler))), *this); \end{codeblock} \end{itemdescr} From 0f900e8495326f36a32d42fdcee4259258598e7b Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Tue, 7 Apr 2026 02:52:44 -0700 Subject: [PATCH 43/44] LWG4528 task needs get_completion_signatures() --- source/exec.tex | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/source/exec.tex b/source/exec.tex index b53cdba51b..da1b4ef9b5 100644 --- a/source/exec.tex +++ b/source/exec.tex @@ -7227,7 +7227,6 @@ public: using sender_concept = sender_t; - using completion_signatures = @\seebelow@; using allocator_type = @\seebelow@; using scheduler_type = @\seebelow@; using stop_source_type = @\seebelow@; @@ -7240,6 +7239,9 @@ task(task&&) noexcept; ~task(); + template + static consteval auto get_completion_signatures(); + template<@\libconcept{receiver}@ Rcvr> @\exposid{state}@ connect(Rcvr&& rcvr) &&; @@ -7281,19 +7283,6 @@ contain an element which is not of the form \tcode{set_error_t(E)} for some type \tcode{E}. -\pnum -The type alias \tcode{completion_signatures} is a specialization -of \tcode{execution::completion_signatures} with the template -arguments (in unspecified order): -\begin{itemize} -\item \tcode{set_value_t()} if \tcode{T} is \tcode{void}, -and \tcode{set_value_t(T)} otherwise; -\item template arguments of the specialization of -\tcode{execution::completion_signatures} denoted by \tcode{error_types}; -and -\item \tcode{set_stopped_t()}. -\end{itemize} - \pnum \tcode{allocator_type} shall meet the \oldconcept{Allocator} requirements. @@ -7325,6 +7314,32 @@ \end{codeblock} \end{itemdescr} +\indexlibrarymember{get_completion_signatures}{task}% +\begin{itemdecl} +template + static consteval auto get_completion_signatures(); +\end{itemdecl} +\begin{itemdescr} +\pnum +Let the type \tcode{C} be a specialization +of \tcode{execution::completion_signatures} +with the template arguments (in unspecified order): +\begin{itemize} +\item +\tcode{set_value_t()} if \tcode{T} is \tcode{void}, +and \tcode{set_value_t(T)} otherwise; +\item +template arguments of the specialization of +\tcode{execution::completion_signatures} denoted by \tcode{error_types}; +and +\item \tcode{set_stopped_t()}. +\end{itemize} + +\pnum +\returns +\tcode{C()}. +\end{itemdescr} + \indexlibrarymember{connect}{task}% \begin{itemdecl} template<@\libconcept{receiver}@ Rcvr> From 076fc3760a1edb33c1a38d04d79561b2ec2fdeb3 Mon Sep 17 00:00:00 2001 From: Dawn Perchik Date: Tue, 7 Apr 2026 02:56:36 -0700 Subject: [PATCH 44/44] LWG4529 task::promise_type::await_transform declaration and definition mismatch --- source/exec.tex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/exec.tex b/source/exec.tex index da1b4ef9b5..cba1458af9 100644 --- a/source/exec.tex +++ b/source/exec.tex @@ -7491,8 +7491,8 @@ template @\unspec@ yield_value(with_error error); - template - auto await_transform(A&& a); + template<@\libconcept{sender}@ Sender> + auto await_transform(Sender&& sndr); template auto await_transform(change_coroutine_scheduler sch); @@ -7611,7 +7611,7 @@ \indexlibrarymember{await_transform}{task::promise_type}% \begin{itemdecl} template<@\libconcept{sender}@ Sender> - auto await_transform(Sender&& sndr) noexcept; + auto await_transform(Sender&& sndr); \end{itemdecl} \begin{itemdescr} \pnum @@ -7625,7 +7625,7 @@ \indexlibrarymember{await_transform}{task::promise_type}% \begin{itemdecl} template - auto await_transform(change_coroutine_scheduler sch) noexcept; + auto await_transform(change_coroutine_scheduler sch); \end{itemdecl} \begin{itemdescr} \pnum