Skip to content
Merged
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
2ea7dbc
LWG2414 Member function reentrancy should be implementation-defined
burblebee Apr 6, 2026
5ea831b
LWG2746 Inconsistency between requirements for emplace between option…
burblebee Apr 6, 2026
0d37df0
LWG3504 condition_variable::wait_for is overspecified
burblebee Apr 7, 2026
b58214b
LWG3599 The const overload of lazy_split_view::begin should be constr…
burblebee Apr 7, 2026
612c845
LWG4290 Missing Mandates clauses on is_sufficiently_aligned
burblebee Apr 7, 2026
346d301
LWG4453 atomic_ref<cv T>::required_alignment should be the same as for T
burblebee Apr 7, 2026
b9add07
LWG4454 assert should forbid co_await and co_yield
burblebee Apr 7, 2026
e1234bc
LWG4469 Names of parameters of addressable function shall remain unsp…
burblebee Apr 7, 2026
7a18690
LWG4472 std::atomic_ref<const T> can be constructed from temporaries
burblebee Apr 7, 2026
b4abee9
LWG4486 integral-constant-like and constexpr-wrapper-like exposition-…
burblebee Apr 7, 2026
6923184
LWG4492 std::generate and std::ranges::generate wording is unclear fo…
burblebee Apr 7, 2026
2e5143b
LWG4496 Precedes vs Reachable in [meta.reflection]
burblebee Apr 7, 2026
1c73ec4
LWG4499 flat_set::insert_range specification may be problematic
burblebee Apr 7, 2026
cc66a29
LWG4510 Ambiguity of std::ranges::advance and std::ranges::next when …
burblebee Apr 7, 2026
4d1f957
LWG4511 Inconsistency between the deduction guide of std::mdspan taki…
burblebee Apr 7, 2026
585e125
LWG4512 The system_encoded_string() and generic_system_encoded_string…
burblebee Apr 7, 2026
787562a
LWG4535 Disallow user specialization of <simd> templates
burblebee Apr 7, 2026
97207d1
LWG4536 Type traits have inconsistent interactions with immediate fun…
burblebee Apr 7, 2026
dc84961
LWG3831 Two-digit formatting of negative year is ambiguous
burblebee Apr 7, 2026
d1705f9
LWG4090 Underspecified use of locale facets for locale-dependent std:…
burblebee Apr 7, 2026
d67ab97
LWG4130 Preconditions for std::launder might be overly strict
burblebee Apr 7, 2026
f700f35
LWG4259 P1148R0 changed the return values of searching functions of s…
burblebee Apr 7, 2026
ebffd32
LWG4324 unique_ptr<void>::operator* is not SFINAE-friendly
burblebee Apr 7, 2026
2d3f1b4
LWG4378 Inconsistency between std::basic_string's data() and operator…
burblebee Apr 7, 2026
dbd9c63
LWG4457 freestanding for stable_sort, stable_partition and inplace_merge
burblebee Apr 7, 2026
b4780d5
LWG4460 Missing Throws: for last variant constructor
burblebee Apr 7, 2026
0aed523
LWG4467 hive::splice can throw bad_alloc
burblebee Apr 7, 2026
f2ceb54
LWG4468 [const.wrap.class] "operator decltype(auto)" is ill-formed
burblebee Apr 7, 2026
d74efc4
LWG4474 "round_to_nearest" rounding mode is unclear
burblebee Apr 7, 2026
ba3eb6e
LWG4477 Placement operator delete should be constexpr
burblebee Apr 7, 2026
658ef11
LWG4480 <stdatomic.h> should provide ATOMIC_CHAR8_T_LOCK_FREE
burblebee Apr 7, 2026
34bedfa
LWG4481 Disallow chrono::duration<const T, P>
burblebee Apr 7, 2026
1819377
LWG4483 Multidimensional arrays are not supported by meta::reflect_co…
burblebee Apr 7, 2026
063e722
LWG4491 Rename submdspan_extents and submdspan_canonicalize_slices
burblebee Apr 7, 2026
b87220c
LWG4493 Specification for some functions of bit reference types seems…
burblebee Apr 7, 2026
518f4c2
LWG4500 constant_wrapper wording problems
burblebee Apr 7, 2026
661ee8a
LWG4514 Missing absolute value of init in vector_two_norm and matrix_…
burblebee Apr 7, 2026
061e643
LWG4517 data_member_spec should throw for cv-qualified unnamed bit-fi…
burblebee Apr 7, 2026
add4df6
LWG4522 Clarify that std::format transcodes for std::wformat_strings
burblebee Apr 7, 2026
be29bdf
LWG4523 constant_wrapper should assign to value
burblebee Apr 7, 2026
1bbe751
LWG4525 task's final_suspend should move the result
burblebee Apr 7, 2026
79a781c
LWG4527 await_transform needs to use as_awaitable
burblebee Apr 7, 2026
a76d1f2
LWG4528 task needs get_completion_signatures()
burblebee Apr 7, 2026
a3bbccb
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.
Comment thread
tkoeppe marked this conversation as resolved.
\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