Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
d5b6323
LWG2414 Member function reentrancy should be implementation-defined
burblebee Apr 6, 2026
66f3f6e
LWG2746 Inconsistency between requirements for emplace between option…
burblebee Apr 6, 2026
f459b24
LWG3504 condition_variable::wait_for is overspecified
burblebee Apr 7, 2026
fd289eb
CWG3599 The const overload of lazy_split_view::begin should be constr…
burblebee Apr 7, 2026
3262916
LWG4290 Missing Mandates clauses on is_sufficiently_aligned
burblebee Apr 7, 2026
2260b2a
LWG4453 atomic_ref<cv T>::required_alignment should be the same as for T
burblebee Apr 7, 2026
e8dfb74
LWG4454 assert should forbid co_await and co_yield
burblebee Apr 7, 2026
c4a7293
LWG4469 Names of parameters of addressable function shall remain unsp…
burblebee Apr 7, 2026
b5910b5
LWG4472 std::atomic_ref<const T> can be constructed from temporaries
burblebee Apr 7, 2026
fe6d73c
LWG4486 integral-constant-like and constexpr-wrapper-like exposition-…
burblebee Apr 7, 2026
6662593
LWG4492 std::generate and std::ranges::generate wording is unclear fo…
burblebee Apr 7, 2026
32bf976
LWG4496 Precedes vs Reachable in [meta.reflection]
burblebee Apr 7, 2026
a8c8631
LWG4499 flat_set::insert_range specification may be problematic
burblebee Apr 7, 2026
ecf1b99
LWG4510 Ambiguity of std::ranges::advance and std::ranges::next when …
burblebee Apr 7, 2026
cc98777
LWG4511 Inconsistency between the deduction guide of std::mdspan taki…
burblebee Apr 7, 2026
2123003
LWG4512 The system_encoded_string() and generic_system_encoded_string…
burblebee Apr 7, 2026
cd9953e
LWG4535 Disallow user specialization of <simd> templates
burblebee Apr 7, 2026
7fed466
LWG4536 Type traits have inconsistent interactions with immediate fun…
burblebee Apr 7, 2026
a102476
LWG3831 Two-digit formatting of negative year is ambiguous
burblebee Apr 7, 2026
3cdb19b
LWG4090 Underspecified use of locale facets for locale-dependent std:…
burblebee Apr 7, 2026
865861d
LWG4130 Preconditions for std::launder might be overly strict
burblebee Apr 7, 2026
bdffae9
LWG4259 P1148R0 changed the return values of searching functions of s…
burblebee Apr 7, 2026
9e936ca
LWG4324 unique_ptr<void>::operator* is not SFINAE-friendly
burblebee Apr 7, 2026
074f180
LWG4378 Inconsistency between std::basic_string's data() and operator…
burblebee Apr 7, 2026
eba8f61
LWG4457 freestanding for stable_sort, stable_partition and inplace_merge
burblebee Apr 7, 2026
c4bab84
LWG4460 Missing Throws: for last variant constructor
burblebee Apr 7, 2026
7138a1d
LWG4467 hive::splice can throw bad_alloc
burblebee Apr 7, 2026
a675875
LWG4468 [const.wrap.class] "operator decltype(auto)" is ill-formed
burblebee Apr 7, 2026
bc2c669
LWG4474 "round_to_nearest" rounding mode is unclear
burblebee Apr 7, 2026
6c9af3d
LWG4477 Placement operator delete should be constexpr
burblebee Apr 7, 2026
edc506e
LWG4480 <stdatomic.h> should provide ATOMIC_CHAR8_T_LOCK_FREE
burblebee Apr 7, 2026
7bcf512
LWG4481 Disallow chrono::duration<const T, P>
burblebee Apr 7, 2026
6da1031
LWG4483 Multidimensional arrays are not supported by meta::reflect_co…
burblebee Apr 7, 2026
ddefdcd
LWG4491 Rename submdspan_extents and submdspan_canonicalize_slices
burblebee Apr 7, 2026
ab81391
LWG4493 Specification for some functions of bit reference types seems…
burblebee Apr 7, 2026
907d064
LWG4500 constant_wrapper wording problems
burblebee Apr 7, 2026
7b4c8c9
LWG4514 Missing absolute value of init in vector_two_norm and matrix_…
burblebee Apr 7, 2026
7dbbd7e
LWG4517 data_member_spec should throw for cv-qualified unnamed bit-fi…
burblebee Apr 7, 2026
4279714
LWG4522 Clarify that std::format transcodes for std::wformat_strings
burblebee Apr 7, 2026
6e26db0
LWG4523 constant_wrapper should assign to value
burblebee Apr 7, 2026
30a71cc
LWG4525 task's final_suspend should move the result
burblebee Apr 7, 2026
8a67cca
LWG4527 await_transform needs to use as_awaitable
burblebee Apr 7, 2026
0f900e8
LWG4528 task needs get_completion_signatures()
burblebee Apr 7, 2026
076fc37
LWG4529 task::promise_type::await_transform declaration and definitio…
burblebee Apr 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 6 additions & 27 deletions source/algorithms.tex
Original file line number Diff line number Diff line change
Expand Up @@ -2316,16 +2316,6 @@
template<@\libconcept{input_or_output_iterator}@ O, @\libconcept{copy_constructible}@ F>
requires @\libconcept{invocable}@<F&> && @\libconcept{indirectly_writable}@<O, invoke_result_t<F&>>
constexpr O generate_n(O first, iter_difference_t<O> n, F gen);
template<@\exposconcept{execution-policy}@ Ep, @\libconcept{random_access_iterator}@ O, @\libconcept{sized_sentinel_for}@<O> S,
@\libconcept{copy_constructible}@ F>
requires @\libconcept{invocable}@<F&> && @\libconcept{indirectly_writable}@<O, invoke_result_t<F&>>
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}@<F&> && @\libconcept{indirectly_writable}@<iterator_t<R>, invoke_result_t<F&>>
borrowed_iterator_t<R> 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}@<F&> && @\libconcept{indirectly_writable}@<O, invoke_result_t<F&>>
O generate_n(Ep&& exec, O first, iter_difference_t<O> n, F gen); // freestanding-deleted
}

// \ref{alg.remove}, remove
Expand Down Expand Up @@ -2857,12 +2847,12 @@
class Comp = ranges::less, class Proj = identity>
requires @\libconcept{sortable}@<I, Comp, Proj>
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}@<iterator_t<R>, Comp, Proj>
borrowed_iterator_t<R>
stable_sort(Ep&& exec, R&& r, Comp comp = {}, Proj proj = {}); // freestanding-deleted
stable_sort(Ep&& exec, R&& r, Comp comp = {}, Proj proj = {}); // hosted
}

template<class RandomAccessIterator>
Expand Down Expand Up @@ -3261,12 +3251,12 @@
requires @\libconcept{permutable}@<I>
subrange<I>
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}@<projected<iterator_t<R>, Proj>> Pred>
requires @\libconcept{permutable}@<iterator_t<R>>
borrowed_subrange_t<R>
stable_partition(Ep&& exec, R&& r, Pred pred, Proj proj = {}); // freestanding-deleted
stable_partition(Ep&& exec, R&& r, Pred pred, Proj proj = {}); // hosted
}

template<class InputIterator, class OutputIterator1,
Expand Down Expand Up @@ -3434,13 +3424,13 @@
class Comp = ranges::less, class Proj = identity>
requires @\libconcept{sortable}@<I, Comp, Proj>
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}@<iterator_t<R>, Comp, Proj>
borrowed_iterator_t<R>
inplace_merge(Ep&& exec, R&& r, iterator_t<R> middle, Comp comp = {},
Proj proj = {}); // freestanding-deleted
Proj proj = {}); // hosted
}

// \ref{alg.set.operations}, set operations
Expand Down Expand Up @@ -7492,17 +7482,6 @@
template<@\libconcept{input_or_output_iterator}@ O, @\libconcept{copy_constructible}@ F>
requires @\libconcept{invocable}@<F&> && @\libconcept{indirectly_writable}@<O, invoke_result_t<F&>>
constexpr O ranges::generate_n(O first, iter_difference_t<O> n, F gen);

template<@\exposconcept{execution-policy}@ Ep, @\libconcept{random_access_iterator}@ O, @\libconcept{sized_sentinel_for}@<O> S,
@\libconcept{copy_constructible}@ F>
requires @\libconcept{invocable}@<F&> && @\libconcept{indirectly_writable}@<O, invoke_result_t<F&>>
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}@<F&> && @\libconcept{indirectly_writable}@<iterator_t<R>, invoke_result_t<F&>>
borrowed_iterator_t<R> 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}@<F&> && @\libconcept{indirectly_writable}@<O, invoke_result_t<F&>>
O ranges::generate_n(Ep&& exec, O first, iter_difference_t<O> n, F gen);
\end{itemdecl}

\begin{itemdescr}
Expand Down
59 changes: 35 additions & 24 deletions source/containers.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -10651,6 +10652,18 @@
\tcode{*this}.
\end{itemdescr}

\indexlibrarymember{operator bool}{vector<bool>::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<bool>::reference}%
\begin{itemdecl}
constexpr void reference::flip() noexcept;
Expand Down Expand Up @@ -19494,8 +19507,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<decltype(e)>(e));
ranges::for_each(rg, [&](value_type e) {
@\exposid{c}@.insert(@\exposid{c}@.end(), std::move(e));
});
\end{codeblock}
Then,
Expand Down Expand Up @@ -20182,8 +20195,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<decltype(e)>(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},
Expand Down Expand Up @@ -20392,10 +20405,7 @@
concept @\defexposconcept{integral-constant-like}@ = // \expos
is_integral_v<remove_cvref_t<decltype(T::value)>> &&
!is_same_v<bool, remove_cvref_t<decltype(T::value)>> &&
@\libconcept{convertible_to}@<T, decltype(T::value)> &&
@\libconcept{equality_comparable_with}@<T, decltype(T::value)> &&
bool_constant<T() == T::value>::value &&
bool_constant<static_cast<decltype(T::value)>(T()) == T::value>::value;
@\exposconcept{constexpr-wrapper-like}@<T>;

template<class T>
constexpr size_t @\defexposconcept{maybe-static-ext}@ = dynamic_extent; // \expos
Expand Down Expand Up @@ -21289,12 +21299,12 @@
inline constexpr full_extent_t full_extent{};

template<class IndexType, size_t... Extents, class... SliceSpecifiers>
constexpr auto submdspan_extents(const extents<IndexType, Extents...>&, SliceSpecifiers...);
constexpr auto subextents(const extents<IndexType, Extents...>&, SliceSpecifiers...);

// \ref{mdspan.sub.canonical}, \tcode{submdspan} slice canonicalization
template<class IndexType, size_t... Extents, class... Slices>
constexpr auto submdspan_canonicalize_slices(const extents<IndexType, Extents...>& src,
Slices... slices);
constexpr auto canonical_slices(const extents<IndexType, Extents...>& src,
Slices... slices);

// \ref{mdspan.sub.sub}, \tcode{submdspan} function template
template<class ElementType, class Extents, class LayoutPolicy,
Expand Down Expand Up @@ -25033,7 +25043,7 @@
typename MappingType::layout_type>;

template<class MappingType, class AccessorType>
mdspan(const typename AccessorType::data_handle_type&, const MappingType&,
mdspan(typename AccessorType::data_handle_type, const MappingType&,
const AccessorType&)
-> mdspan<typename AccessorType::element_type, typename MappingType::extents_type,
typename MappingType::layout_type, AccessorType>;
Expand Down Expand Up @@ -25846,11 +25856,12 @@

\rSec4[mdspan.sub.canonical]{\tcode{submdspan} slice canonicalization}

\indexlibraryglobal{submdspan_canonicalize_slices}%
%FIXME: "Slices" is used instead of "SliceSpecifiers" in the synopsis declaration.
\indexlibraryglobal{canonical_slices}%
\begin{itemdecl}
template<class IndexType, size_t... Extents, class... SliceSpecifiers>
constexpr auto submdspan_canonicalize_slices(const extents<IndexType, Extents...>& src,
SliceSpecifiers... slices);
constexpr auto canonical_slices(const extents<IndexType, Extents...>& src,
SliceSpecifiers... slices);
\end{itemdecl}

\begin{itemdescr}
Expand Down Expand Up @@ -25882,20 +25893,20 @@
\tcode{make_tuple(\exposid{canonical-slice}<IndexType>(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<class IndexType, size_t... Extents, class... SliceSpecifiers>
constexpr auto submdspan_extents(const extents<IndexType, Extents...>& src,
SliceSpecifiers... raw_slices);
constexpr auto subextents(const extents<IndexType, 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
Expand Down Expand Up @@ -26048,7 +26059,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}
Expand Down Expand Up @@ -26121,7 +26132,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
Expand Down Expand Up @@ -26502,7 +26513,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
Expand Down
5 changes: 4 additions & 1 deletion source/diagnostics.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
55 changes: 35 additions & 20 deletions source/exec.tex
Original file line number Diff line number Diff line change
Expand Up @@ -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@;
Expand All @@ -7240,6 +7239,9 @@
task(task&&) noexcept;
~task();

template<class Self, class... Env>
static consteval auto get_completion_signatures();

template<@\libconcept{receiver}@ Rcvr>
@\exposid{state}@<Rcvr> connect(Rcvr&& rcvr) &&;

Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -7325,6 +7314,32 @@
\end{codeblock}
\end{itemdescr}

\indexlibrarymember{get_completion_signatures}{task}%
\begin{itemdecl}
template<class Self, class... Env>
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>
Expand Down Expand Up @@ -7476,8 +7491,8 @@
template<class E>
@\unspec@ yield_value(with_error<E> error);

template<class A>
auto await_transform(A&& a);
template<@\libconcept{sender}@ Sender>
auto await_transform(Sender&& sndr);
template<class Sch>
auto await_transform(change_coroutine_scheduler<Sch> sch);

Expand Down Expand Up @@ -7568,7 +7583,7 @@
\tcode{set_value(std::move(\exposid{RCVR}(*this)))} if \tcode{is_void<T>} 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}

Expand Down Expand Up @@ -7596,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
Expand All @@ -7610,14 +7625,14 @@
\indexlibrarymember{await_transform}{task::promise_type}%
\begin{itemdecl}
template<class Sch>
auto await_transform(change_coroutine_scheduler<Sch> sch) noexcept;
auto await_transform(change_coroutine_scheduler<Sch> sch);
\end{itemdecl}
\begin{itemdescr}
\pnum
\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}

Expand Down
4 changes: 2 additions & 2 deletions source/future.tex
Original file line number Diff line number Diff line change
Expand Up @@ -929,7 +929,7 @@
\begin{itemdescr}
\pnum
\returns
\tcode{system_encoded_string()}.
\tcode{native_encoded_string()}.
\end{itemdescr}

\indexlibrarymember{generic_string}{path}%
Expand All @@ -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}
Expand Down
Loading
Loading