Skip to content
Open
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
bf575fb
LWG3343 Ordering of calls to unlock() and notify_all() in Effects ele…
burblebee Nov 15, 2025
97383b5
LWG3454 pointer_traits::pointer_to should be constexpr
burblebee Nov 15, 2025
2ea2ab9
LWG4015 LWG 3973 broke const overloads of std::optional monadic opera…
burblebee Dec 2, 2025
acfeaba
LWG4230 simd<complex>::real/imag is overconstrained
burblebee Dec 3, 2025
c7e67b6
LWG4251 Move assignment for indirect unnecessarily requires copy cons…
burblebee Dec 3, 2025
b92f18b
LWG4260 Query objects must be default constructible
burblebee Dec 3, 2025
655765a
LWG4272 For rank == 0, layout_stride is atypically convertible
burblebee Dec 3, 2025
01bff15
LWG4302 Problematic vector_sum_of_squares wording
burblebee Dec 3, 2025
c0c704b
LWG4304 std::optional<NonReturnable&> is ill-formed due to value_or
burblebee Dec 3, 2025
990f680
LWG4308 std::optional<T&>::iterator can't be a contiguous iterator fo…
burblebee Dec 3, 2025
3dcd790
LWG4316 {can_}substitute specification is ill-formed
burblebee Dec 3, 2025
03c5d17
LWG4358 [exec.as.awaitable] is using "Preconditions:" when it should …
burblebee Dec 3, 2025
5deca0b
LWG4360 awaitable-sender concept should qualify use of awaitable-rece…
burblebee Dec 3, 2025
337988d
LWG4369 check-types function for upon_error and upon_stopped is wrong
burblebee Dec 3, 2025
25c0671
LWG4376 ABI tag in return type of [simd.mask.unary] is overconstrained
burblebee Dec 3, 2025
65b4fcd
LWG4383 constant_wrapper's pseudo-mutators are underconstrained
burblebee Dec 3, 2025
8bb3a00
LWG4388 Align new definition of va_start with C23
burblebee Dec 3, 2025
09251f3
LWG4396 Improve inplace_vector(from_range_t, R&& rg)
burblebee Dec 3, 2025
df419aa
LWG4420 [simd] conversions (constructor, load, stores, gather, and sc…
burblebee Dec 3, 2025
f3a2fd9
LWG4424 meta::define_aggregate should require a class type
burblebee Dec 3, 2025
872fa85
LWG4427 meta::dealias needs to work with things that aren't entities
burblebee Dec 3, 2025
599380f
LWG4428 Metafunctions should not be defined in terms of constant sube…
burblebee Dec 3, 2025
60b2a5c
LWG4429 meta::alignment_of should exclude data member description of …
burblebee Dec 3, 2025
b34d02f
LWG4430 from_chars should not parse "0b" base prefixes
burblebee Dec 3, 2025
4d568a4
LWG4431 Parallel std::ranges::destroy should allow exceptions
burblebee Dec 3, 2025
82ddaa6
LWG4432 Clarify element initialization for meta::reflect_constant_array
burblebee Dec 3, 2025
1c1c5a3
LWG4433 Incorrect query for C language linkage
burblebee Dec 3, 2025
8c042ff
LWG4434 meta::is_accessible does not need to consider incomplete D
burblebee Dec 3, 2025
3a24446
LWG4435 meta::has_identifier doesn't handle all types
burblebee Dec 3, 2025
bb98d62
LWG4438 Bad expression in [exec.when.all]
burblebee Dec 3, 2025
2b5e9bf
LWG4439 std::optional<T&>::swap possibly selects ADL-found swap
burblebee Dec 3, 2025
e192323
LWG4440 Forward declarations of entities need also in entries
burblebee Dec 4, 2025
d862d34
LWG4441 ranges::rotate do not handle sized-but-not-sized-sentinel ran…
burblebee Dec 4, 2025
7e73d41
LWG4442 Clarify expr and fn for meta::reflect_object and meta::reflec…
burblebee Dec 4, 2025
4fdadc2
LWG4443 Clean up identifier comparisons in meta::define_aggregate
burblebee Dec 4, 2025
56e426e
FIXUP LWG4429: Change \perp to \bot in case that was the intent (was …
burblebee Dec 4, 2025
4c4c8d2
LWG4444 Fix default template arguments for ranges::replace and ranges…
burblebee Dec 4, 2025
a32b8bf
LWG4445 sch_ must not be in moved-from state
burblebee Dec 4, 2025
3daccf9
LWG4446 Bad phrasing for SCHED(s)
burblebee Dec 4, 2025
ceea8a4
LWG4447 Remove unnecessary sizeof…(Env) > 1 condition
burblebee Dec 4, 2025
96853a0
LWG4448 Do not forward fn in completion_signatures
burblebee Dec 4, 2025
d44f492
LWG4449 define_aggregate members must be public
burblebee Dec 4, 2025
5dadda7
LWG4450 std::atomic_ref<T>::store_key should be disabled for const T
burblebee Dec 4, 2025
ce23d66
LWG4451 make_shared should not refer to a type U[N] for runtime N
burblebee Dec 4, 2025
ea71fdd
LWG4452 Make deref-move constexpr
burblebee Dec 4, 2025
566dbda
LWG4455 Add missing constraint to basic-sender::get_completion_signat…
burblebee Dec 4, 2025
e274317
LWG4456 Decay Data and Child in make-sender
burblebee Dec 4, 2025
aaa993f
LWG4459 Protect get_completion_signatures fold expression from overlo…
burblebee Dec 4, 2025
5289650
LWG4461 stop-when needs to evaluate unstoppable tokens
burblebee Dec 4, 2025
87d89ef
LWG4462 Algorithm requirements don't describe semantics of s - i well
burblebee Dec 4, 2025
578c73f
LWG4463 Change wording to 'model' from 'subsumes' in [algorithms.para…
burblebee Dec 4, 2025
e353581
LWG4464 [alg.merge] Wording tweaks
burblebee Dec 4, 2025
bd0df64
LWG4465 §[alg.partitions] Clarify Returns: element
burblebee Dec 4, 2025
537b284
FIXUP LWG3343: Keep "sequenced after" on same line (as per review req…
burblebee Dec 4, 2025
033f7e5
[optional.dtor] Fix double negative in wording added by LWG4015.
burblebee Dec 4, 2025
d892ebc
[optional.swap] Fix singular->plural tense that was missed in LWG4015.
burblebee Dec 4, 2025
997c5d0
FIXUP LWG4015: Break lines after comma as suggested in review.
burblebee Dec 4, 2025
4d67aae
FIXUP LWG4451: "known" -> "unknown"
burblebee Dec 4, 2025
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
18 changes: 12 additions & 6 deletions source/algorithms.tex
Original file line number Diff line number Diff line change
Expand Up @@ -8256,7 +8256,8 @@
\effects
Equivalent to:
\begin{codeblock}
return ranges::rotate(std::forward<Ep>(exec), ranges::begin(r), middle, ranges::end(r));
return ranges::rotate(std::forward<Ep>(exec), ranges::begin(r), middle,
ranges::begin(r) + ranges::distance(r));
\end{codeblock}
\end{itemdescr}

Expand Down Expand Up @@ -8381,8 +8382,10 @@
\effects
Equivalent to:
\begin{codeblock}
return ranges::rotate_copy(std::forward<Ep>(exec), ranges::begin(r), middle, ranges::end(r),
ranges::begin(result_r), ranges::end(result_r));
return ranges::rotate_copy(std::forward<Ep>(exec), ranges::begin(r), middle,
ranges::begin(r) + ranges::distance(r),
ranges::begin(result_r),
ranges::begin(result_r) + ranges::distance(result_r));
\end{codeblock}
\end{itemdescr}

Expand Down Expand Up @@ -9002,7 +9005,8 @@
Equivalent to:
\begin{codeblock}
return ranges::partial_sort(std::forward<Ep>(exec), ranges::begin(r), middle,
ranges::end(r), comp, proj);
ranges::begin(r) + ranges::distance(r),
comp, proj);
\end{codeblock}
\end{itemdescr}

Expand Down Expand Up @@ -9386,7 +9390,8 @@
\effects
Equivalent to:
\begin{codeblock}
return ranges::nth_element(std::forward<Ep>(exec), ranges::begin(r), nth, ranges::end(r),
return ranges::nth_element(std::forward<Ep>(exec), ranges::begin(r), nth,
ranges::begin(r) + ranges::distance(r),
comp, proj);
\end{codeblock}
\end{itemdescr}
Expand Down Expand Up @@ -10258,7 +10263,8 @@
Equivalent to:
\begin{codeblock}
return ranges::inplace_merge(std::forward<Ep>(exec), ranges::begin(r), middle,
ranges::end(r), comp, proj);
ranges::begin(r) + ranges::distance(r),
comp, proj);
\end{codeblock}
\end{itemdescr}

Expand Down
54 changes: 46 additions & 8 deletions source/containers.tex
Original file line number Diff line number Diff line change
Expand Up @@ -1810,6 +1810,9 @@
\mandates
\tcode{\libconcept{assignable_from}<T\&, ranges::range_reference_t<R>>}
is modeled.
For \tcode{inplace_vector},
if \tcode{ranges::size(rg)} is a constant expression then
\tcode{ranges::size(rg)} $\le$ \tcode{a.max_size()}.

\pnum
\expects
Expand Down Expand Up @@ -10994,6 +10997,11 @@
\end{itemdecl}

\begin{itemdescr}
\pnum
\mandates
If \tcode{ranges::size(rg)} is a constant expression then
\tcode{ranges::size(rg)} $\le$ \tcode{N}.

\pnum
\effects
Constructs an \tcode{inplace_vector} with
Expand Down Expand Up @@ -21940,7 +21948,7 @@
extents_type>)
mapping(const LayoutLeftPaddedMapping&) noexcept;
template<class OtherExtents>
constexpr explicit(extents_type::rank() > 0)
constexpr explicit(@\seebelow@)
mapping(const layout_stride::mapping<OtherExtents>&);

constexpr mapping& operator=(const mapping&) noexcept = default;
Expand Down Expand Up @@ -22116,7 +22124,7 @@
\indexlibraryctor{layout_left::mapping}%
\begin{itemdecl}
template<class OtherExtents>
constexpr explicit(extents_type::rank() > 0)
constexpr explicit(@\seebelow@)
mapping(const layout_stride::mapping<OtherExtents>& other);
\end{itemdecl}

Expand All @@ -22141,6 +22149,13 @@
\pnum
\effects
Direct-non-list-initializes \exposid{extents_} with \tcode{other.extents()}.

\pnum
\remarks
The expression inside \tcode{explicit} is equivalent to:
\begin{codeblock}
!(extents_type::rank() == 0 && is_convertible_v<OtherExtents, extents_type>)
\end{codeblock}
\end{itemdescr}

\rSec5[mdspan.layout.left.obs]{Observers}
Expand Down Expand Up @@ -22262,7 +22277,7 @@
extents_type>)
mapping(const LayoutRightPaddedMapping&) noexcept;
template<class OtherExtents>
constexpr explicit(extents_type::rank() > 0)
constexpr explicit(@\seebelow@)
mapping(const layout_stride::mapping<OtherExtents>&) noexcept;

constexpr mapping& operator=(const mapping&) noexcept = default;
Expand Down Expand Up @@ -22442,7 +22457,7 @@
\indexlibraryctor{layout_right::mapping}%
\begin{itemdecl}
template<class OtherExtents>
constexpr explicit(extents_type::rank() > 0)
constexpr explicit(@\seebelow@)
mapping(const layout_stride::mapping<OtherExtents>& other) noexcept;
\end{itemdecl}

Expand All @@ -22467,6 +22482,13 @@
\pnum
\effects
Direct-non-list-initializes \exposid{extents_} with \tcode{other.extents()}.

\pnum
\remarks
The expression inside \tcode{explicit} is equivalent to:
\begin{codeblock}
!(extents_type::rank() == 0 && is_convertible_v<OtherExtents, extents_type>)
\end{codeblock}
\end{itemdescr}

\rSec5[mdspan.layout.right.obs]{Observers}
Expand Down Expand Up @@ -22979,7 +23001,7 @@
constexpr explicit(!is_convertible_v<OtherExtents, extents_type>)
mapping(const layout_left::mapping<OtherExtents>&);
template<class OtherExtents>
constexpr explicit(extents_type::rank() > 0)
constexpr explicit(@\seebelow@)
mapping(const layout_stride::mapping<OtherExtents>&);
template<class LayoutLeftPaddedMapping>
constexpr explicit(@\seebelow@)
Expand Down Expand Up @@ -23268,7 +23290,7 @@
\indexlibraryctor{layout_left_padded::mapping}%
\begin{itemdecl}
template<class OtherExtents>
constexpr explicit(rank_ > 0)
constexpr explicit(@\seebelow@)
mapping(const layout_stride::mapping<OtherExtents>& other);
\end{itemdecl}

Expand Down Expand Up @@ -23313,6 +23335,13 @@
direct-non-list-initializes \exposid{stride-1} with
\tcode{other.stride(1)}.
\end{itemize}

\pnum
\remarks
The expression inside \tcode{explicit} is equivalent to:
\begin{codeblock}
!(rank_ == 0 && is_convertible_v<OtherExtents, extents_type>)
\end{codeblock}
\end{itemdescr}

\indexlibraryctor{layout_left_padded::mapping}%
Expand Down Expand Up @@ -23375,6 +23404,7 @@
\remarks
The expression inside \tcode{explicit} is equivalent to:
\begin{codeblock}
!is_convertible_v<typename LayoutLeftPaddedMapping::extents_type, extents_type> ||
rank_> 1 &&
(padding_value != dynamic_extent ||
LayoutLeftPaddedMapping::padding_value == dynamic_extent)
Expand Down Expand Up @@ -23603,7 +23633,7 @@
constexpr explicit(!is_convertible_v<OtherExtents, extents_type>)
mapping(const layout_right::mapping<OtherExtents>&);
template<class OtherExtents>
constexpr explicit(rank_ > 0)
constexpr explicit(@\seebelow@)
mapping(const layout_stride::mapping<OtherExtents>&);
template<class LayoutRightPaddedMapping>
constexpr explicit(@\seebelow@)
Expand Down Expand Up @@ -23896,7 +23926,7 @@
\indexlibraryctor{layout_right_padded::mapping}%
\begin{itemdecl}
template<class OtherExtents>
constexpr explicit(rank_ > 0)
constexpr explicit(@\seebelow@)
mapping(const layout_stride::mapping<OtherExtents>& other);
\end{itemdecl}

Expand Down Expand Up @@ -23942,6 +23972,13 @@
direct-non-list-initializes \exposid{stride-rm2}
with \tcode{other.stride(\exposid{rank_} - 2)}.
\end{itemize}

\pnum
\remarks
The expression inside \tcode{explicit} is equivalent to:
\begin{codeblock}
!(rank_ == 0 && is_convertible_v<OtherExtents, extents_type>)
\end{codeblock}
\end{itemdescr}

\indexlibraryctor{layout_right_padded::mapping}%
Expand Down Expand Up @@ -24004,6 +24041,7 @@
\remarks
The expression inside \tcode{explicit} is equivalent to:
\begin{codeblock}
!is_convertible_v<typename LayoutRightPaddedMapping::extents_type, extents_type> ||
@\exposid{rank_}@ > 1 &&
(padding_value != dynamic_extent ||
LayoutRightPaddedMapping::padding_value == dynamic_extent)
Expand Down
35 changes: 15 additions & 20 deletions source/exec.tex
Original file line number Diff line number Diff line change
Expand Up @@ -3816,7 +3816,7 @@
Equivalent to:
\begin{codeblock}
auto cs = get_completion_signatures<@\exposid{child-type}@<Sndr>, @\exposid{FWD-ENV-T}@(Env)...>();
auto fn = []<class... Ts>(set_value_t(*)(Ts...)) {
auto fn = []<class... Ts>(@\exposid{decayed-typeof}@<@\exposid{set-cpo}@>(*)(Ts...)) {
if constexpr (!@\libconcept{invocable}@<remove_cvref_t<@\exposid{data-type}@<Sndr>>, Ts...>)
throw @\placeholder{unspecified-exception}@();
};
Expand Down Expand Up @@ -4428,22 +4428,24 @@
\begin{codeblock}
template<class Env>
constexpr auto @\exposid{make-when-all-env}@(inplace_stop_source& stop_src, // \expos
Env&& env) noexcept {
return @\seebelow@;
}
Env&& env) noexcept;
\end{codeblock}
Returns an object \tcode{e} such that

\pnum
\returns
An object \tcode{e} such that
\begin{itemize}
\item
\tcode{decltype(e)} models \exposconcept{queryable}, and
\item
\tcode{e.query(get_stop_token)} is expression-equivalent to
\tcode{state.\exposid{stop-src}.get_token()}, and
\tcode{stop_src.get_token()}, and
\item
given a query object \tcode{q}
with type other than \cv{} \tcode{get_stop_token_t} and
whose type satisfies \exposconceptx{forwarding-\brk{}query}{forwarding-query},
\tcode{e.query(q)} is expression-equivalent to \tcode{get_env(rcvr).query(q)}.
with type other than \cv{} \tcode{get_stop_token_t},
\tcode{e.query(q)} is expression-equivalent to \tcode{env.query(q)}
if the type of \tcode{q} satisfies \exposconcept{forwarding-query}, and
ill-formed otherwise.
\end{itemize}

\pnum
Expand Down Expand Up @@ -6616,7 +6618,8 @@
template<class Sndr, class Promise>
concept @\defexposconcept{awaitable-sender}@ =
@\exposconcept{single-sender}@<Sndr, env_of_t<Promise>> &&
@\libconcept{sender_to}@<Sndr, @\exposid{awaitable-receiver}@> && // \seebelow
@\libconcept{sender_to}@<Sndr,
typename @\exposid{sender-awaitable}@<Sndr, Promise>::@\exposid{awaitable-receiver}@> && // \seebelow
requires (Promise& p) {
{ p.unhandled_stopped() } -> @\libconcept{convertible_to}@<coroutine_handle<>>;
};
Expand Down Expand Up @@ -6758,16 +6761,8 @@
where \tcode{A} is the type of the expression above.
\item
Otherwise, \tcode{(void(p), expr)}
if \tcode{\exposconcept{is-awaitable}<Expr, U>} is \tcode{true},
where \tcode{U} is an unspecified class type
that is not \tcode{Promise} and
that lacks a member named \tcode{await_transform}.

\expects
\tcode{\exposconcept{is-awaitable}<Expr, Promise>} is \tcode{true} and
the expression \tcode{co_await expr}
in a coroutine with promise type \tcode{U} is expression-equivalent to
the same expression in a coroutine with promise type \tcode{Promise}.
if \tcode{decltype(\exposid{GET-AWAITER}(expr))}
satisfies \tcode{\exposconcept{is-awaiter}<Promise>}.
\item
Otherwise, \tcode{\exposid{sender-awaitable}\{\exposid{adapted-expr}, p\}}
if
Expand Down
7 changes: 6 additions & 1 deletion source/lib-intro.tex
Original file line number Diff line number Diff line change
Expand Up @@ -871,7 +871,12 @@

\pnum
The type of a customization point object, ignoring cv-qualifiers, shall model
\libconcept{semiregular}\iref{concepts.object}.
\libconcept{semiregular}\iref{concepts.object}
and shall be
a structural type\iref{temp.param} and
a trivially copyable type\iref{class.prop}.
Every constructor of this type
shall have a non-throwing exception specification\iref{except.spec}.

\pnum
All instances of a specific customization point object type shall
Expand Down
Loading