Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
64a3dc2
LWG3417 Missing volatile atomic deprecations
eisenwave Jun 14, 2026
0728c9d
LWG4125 move_iterator's default constructor should be constrained
eisenwave Jun 14, 2026
051d545
LWG4158 packaged_task::operator= should abandon its shared state
eisenwave Jun 14, 2026
a60c407
LWG4182 Definition of NULL is too broad
eisenwave Jun 14, 2026
7a51728
LWG4218 Constraint recursion in basic_const_iterator's relational ope…
eisenwave Jun 14, 2026
6061473
LWG4249 The past end issue for lazy_split_view
eisenwave Jun 14, 2026
fcab6a7
LWG4267 Uses-allocator construction is meaningless for tuple of refer…
eisenwave Jun 14, 2026
799626b
LWG4359 as_awaitable(expr, p) does not define semantics of call if p …
eisenwave Jun 14, 2026
7ca77d2
LWG4385 Including <simd> doesn't provide std::begin/end
eisenwave Jun 14, 2026
477db73
LWG4471 Remove test for get_env noexcept-ness from inline_scheduler
eisenwave Jun 14, 2026
375ed0b
LWG4487 Is member is_steady of a Cpp17Clock type required to be usabl…
eisenwave Jun 14, 2026
3cb2da6
LWG4490 Allow calling std::ranges::size in ranges algorithms
eisenwave Jun 14, 2026
4b6afc6
LWG4521 Improve [atomics.order] p10 to have a consistent way with [in…
eisenwave Jun 14, 2026
9aed176
LWG4121 ranges::to constructs associative containers via c.emplace(c.…
eisenwave Jun 14, 2026
67de6ff
LWG4531 Should there be a feature-test macro update for constexpr std…
eisenwave Jun 14, 2026
4ac0241
LWG4567 Feature test macro value for apply_result, is_applicable
eisenwave Jun 14, 2026
69a6eb4
LWG4568 std::execution::spawn_future is mishandling dependent senders
eisenwave Jun 14, 2026
38b2407
LWG4579 make-state<Rcvr>::state-type::complete uses Env which is not …
eisenwave Jun 14, 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
7 changes: 3 additions & 4 deletions source/algorithms.tex
Original file line number Diff line number Diff line change
Expand Up @@ -268,10 +268,9 @@
\item
a corresponding iterator argument is initialized with \tcode{ranges::begin(r)} and
\item
a corresponding sentinel argument is initialized with \tcode{ranges::end(r)},
or \tcode{ranges::next(ranges::\brk{}begin(r), ranges::end(r))}
if the type of \tcode{r} models \libconcept{forward_range}
and computing \tcode{ranges::next} meets the specified complexity requirements.
a corresponding sentinel argument is initialized with
\tcode{ranges::begin(r) + N}
where \tcode{N} is equal to \tcode{ranges::distance(r)}.
\end{itemize}

\pnum
Expand Down
16 changes: 8 additions & 8 deletions source/exec.tex
Original file line number Diff line number Diff line change
Expand Up @@ -4911,7 +4911,7 @@
\end{codeblock}
where \tcode{\placeholder{sends-stopped}} equals \tcode{true}
if and only if there exists an element \tcode{S} of \tcode{Sndrs} such that
\tcode{completion_signatures_of_t<S, \exposid{when-all-env}<Env>>}
\tcode{completion_signatures_of_t<S, \exposid{when-all-env}<env_of_t<Rcvr>>>}
contains \tcode{set_stopped_t()}.
\end{itemize}

Expand Down Expand Up @@ -5641,9 +5641,9 @@
namespace std::execution {
template<class Alloc, @\libconcept{scope_token}@ Token, @\libconcept{sender}@ Sender, class Env>
struct @\exposidnc{spawn-future-state}@ // \expos
: @\exposid{spawn-future-state-base}@<completion_signatures_of_t<@\exposid{future-spawned-sender}@<Sender, Env>>> {
: @\exposid{spawn-future-state-base}@<completion_signatures_of_t<@\exposid{future-spawned-sender}@<Sender, Env>, env<>>> {
using @\exposidnc{sigs-t}@ = // \expos
completion_signatures_of_t<@\exposid{future-spawned-sender}@<Sender, Env>>;
completion_signatures_of_t<@\exposid{future-spawned-sender}@<Sender, Env>, env<>>;
using @\exposidnc{receiver-t}@ = // \expos
@\exposid{spawn-future-receiver}@<@\exposid{sigs-t}@>;
using @\exposidnc{op-t}@ = // \expos
Expand Down Expand Up @@ -6838,8 +6838,7 @@
\tcode{(void(\exposid{sndr}), auto(\exposid{rcvr}))} is potentially-throwing.
\item
The expression \tcode{get_completion_scheduler<C>(get_env(\exposid{sndr}))}
is potentially-throwing if and only if \exposid{sndr} is potentially-throwing,
has type \exposid{run-loop-scheduler}, and
has type \exposid{run-loop-scheduler} and
compares equal to the \exposid{run-loop-\newline scheduler} instance
from which \exposid{sndr} was obtained.
\end{itemize}
Expand Down Expand Up @@ -7161,11 +7160,12 @@

\pnum
\tcode{as_awaitable} is a customization point object.
For subexpressions \tcode{expr} and \tcode{p}
where \tcode{p} is an lvalue,
For subexpressions \tcode{expr} and \tcode{p},
\tcode{Expr} names the type \tcode{decltype((expr))} and
\tcode{Promise} names the type \tcode{decay_t<decltype((p))>},
\tcode{as_awaitable(expr, p)} is expression-equivalent to,
\tcode{as_awaitable(expr, p)} is ill-formed if \tcode{p} is not an lvalue,
otherwise \tcode{as_awaitable(expr, p)} is expression-equivalent to
the expression specified below,
except that the evaluations of \tcode{expr} and \tcode{p}
are indeterminately sequenced:
\begin{itemize}
Expand Down
7 changes: 7 additions & 0 deletions source/future.tex
Original file line number Diff line number Diff line change
Expand Up @@ -987,6 +987,13 @@
T fetch_@\placeholdernc{key}@(T operand, memory_order order = memory_order::seq_cst) volatile noexcept;
T operator @\placeholdernc{op}@=(T operand) volatile noexcept;
T* fetch_@\placeholdernc{key}@(ptrdiff_t operand, memory_order order = memory_order::seq_cst) volatile noexcept;
value_type operator++(int) volatile noexcept;
value_type operator--(int) volatile noexcept;
value_type operator++() volatile noexcept;
value_type operator--() volatile noexcept;
void wait(T old, memory_order order = memory_order::seq_cst) const volatile noexcept;
void notify_one() volatile noexcept;
void notify_all() volatile noexcept;
\end{codeblock}

\rSec2[depr.atomics.nonmembers]{Non-member functions}
Expand Down
49 changes: 19 additions & 30 deletions source/iterators.tex
Original file line number Diff line number Diff line change
Expand Up @@ -4339,17 +4339,17 @@
constexpr auto operator<=>(const I& y) const
requires @\libconcept{random_access_iterator}@<Iterator> && @\libconcept{totally_ordered_with}@<Iterator, I> &&
@\libconcept{three_way_comparable_with}@<Iterator, I>;
template<@\exposconcept{not-a-const-iterator}@ I>
friend constexpr bool operator<(const I& x, const basic_const_iterator& y)
template<@\exposconcept{not-a-const-iterator}@ I, @\libconcept{same_as}@<Iterator> J>
friend constexpr bool operator<(const I& x, const basic_const_iterator<J>& y)
requires @\libconcept{random_access_iterator}@<Iterator> && @\libconcept{totally_ordered_with}@<Iterator, I>;
template<@\exposconcept{not-a-const-iterator}@ I>
friend constexpr bool operator>(const I& x, const basic_const_iterator& y)
template<@\exposconcept{not-a-const-iterator}@ I, @\libconcept{same_as}@<Iterator> J>
friend constexpr bool operator>(const I& x, const basic_const_iterator<J>& y)
requires @\libconcept{random_access_iterator}@<Iterator> && @\libconcept{totally_ordered_with}@<Iterator, I>;
template<@\exposconcept{not-a-const-iterator}@ I>
friend constexpr bool operator<=(const I& x, const basic_const_iterator& y)
template<@\exposconcept{not-a-const-iterator}@ I, @\libconcept{same_as}@<Iterator> J>
friend constexpr bool operator<=(const I& x, const basic_const_iterator<J>& y)
requires @\libconcept{random_access_iterator}@<Iterator> && @\libconcept{totally_ordered_with}@<Iterator, I>;
template<@\exposconcept{not-a-const-iterator}@ I>
friend constexpr bool operator>=(const I& x, const basic_const_iterator& y)
template<@\exposconcept{not-a-const-iterator}@ I, @\libconcept{same_as}@<Iterator> J>
friend constexpr bool operator>=(const I& x, const basic_const_iterator<J>& y)
requires @\libconcept{random_access_iterator}@<Iterator> && @\libconcept{totally_ordered_with}@<Iterator, I>;

friend constexpr basic_const_iterator operator+(const basic_const_iterator& i,
Expand Down Expand Up @@ -4704,17 +4704,17 @@
\indexlibrarymember{operator<=}{basic_const_iterator}%
\indexlibrarymember{operator>=}{basic_const_iterator}%
\begin{itemdecl}
template<@\exposconcept{not-a-const-iterator}@ I>
friend constexpr bool operator<(const I& x, const basic_const_iterator& y)
template<@\exposconcept{not-a-const-iterator}@ I, @\libconcept{same_as}@<Iterator> J>
friend constexpr bool operator<(const I& x, const basic_const_iterator<J>& y)
requires @\libconcept{random_access_iterator}@<Iterator> && @\libconcept{totally_ordered_with}@<Iterator, I>;
template<@\exposconcept{not-a-const-iterator}@ I>
friend constexpr bool operator>(const I& x, const basic_const_iterator& y)
template<@\exposconcept{not-a-const-iterator}@ I, @\libconcept{same_as}@<Iterator> J>
friend constexpr bool operator>(const I& x, const basic_const_iterator<J>& y)
requires @\libconcept{random_access_iterator}@<Iterator> && @\libconcept{totally_ordered_with}@<Iterator, I>;
template<@\exposconcept{not-a-const-iterator}@ I>
friend constexpr bool operator<=(const I& x, const basic_const_iterator& y)
template<@\exposconcept{not-a-const-iterator}@ I, @\libconcept{same_as}@<Iterator> J>
friend constexpr bool operator<=(const I& x, const basic_const_iterator<J>& y)
requires @\libconcept{random_access_iterator}@<Iterator> && @\libconcept{totally_ordered_with}@<Iterator, I>;
template<@\exposconcept{not-a-const-iterator}@ I>
friend constexpr bool operator>=(const I& x, const basic_const_iterator& y)
template<@\exposconcept{not-a-const-iterator}@ I, @\libconcept{same_as}@<Iterator> J>
friend constexpr bool operator>=(const I& x, const basic_const_iterator<J>& y)
requires @\libconcept{random_access_iterator}@<Iterator> && @\libconcept{totally_ordered_with}@<Iterator, I>;
\end{itemdecl}

Expand Down Expand Up @@ -4818,7 +4818,7 @@
using pointer = Iterator;
using reference = iter_rvalue_reference_t<Iterator>;

constexpr move_iterator();
constexpr move_iterator() requires @\libconcept{default_initializable}@<Iterator> = default;
constexpr explicit move_iterator(Iterator i);
template<class U> constexpr move_iterator(const move_iterator<U>& u);
template<class U> constexpr move_iterator& operator=(const move_iterator<U>& u);
Expand Down Expand Up @@ -4856,7 +4856,7 @@
noexcept(noexcept(ranges::iter_swap(x.current, y.current)));

private:
Iterator current; // \expos
Iterator current = Iterator(); // \expos
};
}
\end{codeblock}
Expand Down Expand Up @@ -4912,18 +4912,6 @@

\rSec3[move.iter.cons]{Construction and assignment}

\indexlibraryctor{move_iterator}%
\begin{itemdecl}
constexpr move_iterator();
\end{itemdecl}

\begin{itemdescr}
\pnum
\effects
Value-initializes \tcode{current}.
\end{itemdescr}


\indexlibraryctor{move_iterator}%
\begin{itemdecl}
constexpr explicit move_iterator(Iterator i);
Expand Down Expand Up @@ -7274,6 +7262,7 @@
\item \libheaderref{optional}
\item \libheaderrefx{regex}{re.syn}
\item \libheaderrefx{set}{associative.set.syn}
\item \libheaderref{simd}
\item \libheaderref{span}
\item \libheaderref{stacktrace}
\item \libheaderref{string}
Expand Down
8 changes: 5 additions & 3 deletions source/ranges.tex
Original file line number Diff line number Diff line change
Expand Up @@ -2390,7 +2390,7 @@
requires(Container& c, Ref&& ref) {
requires (requires { c.emplace_back(std::forward<Ref>(ref)); } ||
requires { c.push_back(std::forward<Ref>(ref)); } ||
requires { c.emplace(c.end(), std::forward<Ref>(ref)); } ||
requires { c.emplace_hint(c.end(), std::forward<Ref>(ref)); } ||
requires { c.insert(c.end(), std::forward<Ref>(ref)); });
};
\end{codeblock}
Expand All @@ -2405,8 +2405,8 @@
c.emplace_back(std::forward<Ref>(ref));
else if constexpr (requires { c.push_back(declval<Ref>()); })
c.push_back(std::forward<Ref>(ref));
else if constexpr (requires { c.emplace(c.end(), declval<Ref>()); })
c.emplace(c.end(), std::forward<Ref>(ref));
else if constexpr (requires { c.emplace_hint(c.end(), declval<Ref>()); })
c.emplace_hint(c.end(), std::forward<Ref>(ref));
else
c.insert(c.end(), std::forward<Ref>(ref));
};
Expand Down Expand Up @@ -8192,6 +8192,8 @@
++@\placeholder{current}@;
if (@\placeholder{current}@ == end)
@\exposid{trailing_empty_}@ = true;
else if constexpr (!@\libconcept{forward_range}@<V>)
@\exposid{trailing_empty_}@ = true;
}
}
else {
Expand Down
10 changes: 6 additions & 4 deletions source/support.tex
Original file line number Diff line number Diff line change
Expand Up @@ -287,9 +287,11 @@
The macro
\indexlibraryglobal{NULL}%
\tcode{NULL}
is an \impldef{definition of \tcode{NULL}} null pointer constant.
is an \impldef{definition of \tcode{NULL}} null pointer constant
that is a literal\iref{lex.icon,lex.nullptr}.
\begin{footnote}
Possible definitions include
\tcode{nullptr},
\tcode{0}
and
\tcode{0L},
Expand Down Expand Up @@ -578,8 +580,8 @@
// freestanding, also in \libheader{memory}, \libheader{scoped_allocator}, \libheader{string}, \libheader{deque}, \libheader{forward_list}, \libheader{list},
// \libheader{vector}, \libheader{map}, \libheader{set}, \libheader{unordered_map}, \libheader{unordered_set}
#define @\defnlibxname{cpp_lib_any}@ 201606L // also in \libheader{any}
#define @\defnlibxname{cpp_lib_apply}@ 202506L
// freestanding, also in \libheader{tuple}, \libheader{type_traits}
#define @\defnlibxname{cpp_lib_apply}@ 202603L
// freestanding, also in \libheader{tuple}, \libheader{type_traits}, \libheader{meta}
#define @\defnlibxname{cpp_lib_array_constexpr}@ 201811L
// freestanding, also in \libheader{iterator}, \libheader{array}
#define @\defnlibxname{cpp_lib_as_const}@ 201510L // freestanding, also in \libheader{utility}
Expand Down Expand Up @@ -646,7 +648,7 @@
#define @\defnlibxname{cpp_lib_constexpr_queue}@ 202502L // also in \libheader{queue}
#define @\defnlibxname{cpp_lib_constexpr_set}@ 202502L // also in \libheader{set}
#define @\defnlibxname{cpp_lib_constexpr_stack}@ 202502L // also in \libheader{stack}
#define @\defnlibxname{cpp_lib_constexpr_string}@ 201907L // also in \libheader{string}
#define @\defnlibxname{cpp_lib_constexpr_string}@ 202511L // also in \libheader{string}
#define @\defnlibxname{cpp_lib_constexpr_string_view}@ 201811L // also in \libheader{string_view}
#define @\defnlibxname{cpp_lib_constexpr_tuple}@ 201811L // freestanding, also in \libheader{tuple}
#define @\defnlibxname{cpp_lib_constexpr_typeinfo}@ 202106L // freestanding, also in \libheader{typeinfo}
Expand Down
35 changes: 25 additions & 10 deletions source/threads.tex
Original file line number Diff line number Diff line change
Expand Up @@ -3012,9 +3012,9 @@
\end{note}

\pnum
Atomic read-modify-write operations shall always read the last value
(in the modification order) written before the write associated with
the read-modify-write operation.
An atomic read-modify-write operation always reads the value
from the side effect that immediately precedes the side effect of the
read-modify-write operation in the modification order.

\pnum
An \defnadj{atomic}{modify-write operation} is
Expand Down Expand Up @@ -4943,6 +4943,11 @@
\end{itemdecl}

\begin{itemdescr}
\pnum
\constraints
For the \tcode{volatile} overload of this function,
\tcode{is_always_lock_free} is \tcode{true}.

\pnum
\expects
\tcode{order} is
Expand Down Expand Up @@ -4979,6 +4984,11 @@
\end{itemdecl}

\begin{itemdescr}
\pnum
\constraints
For the \tcode{volatile} overload of this function,
\tcode{is_always_lock_free} is \tcode{true}.

\pnum
\effects
Unblocks the execution of at least one atomic waiting operation
Expand All @@ -5000,6 +5010,11 @@
\end{itemdecl}

\begin{itemdescr}
\pnum
\constraints
For the \tcode{volatile} overload of this function,
\tcode{is_always_lock_free} is \tcode{true}.

\pnum
\effects
Unblocks the execution of all atomic waiting operations
Expand Down Expand Up @@ -11534,7 +11549,7 @@
\begin{itemdescr}
\pnum
\effects
Abandons any shared state\iref{futures.state} and then as if
Equivalent to
\tcode{promise(std::move(rhs)).swap(*this)}.

\pnum
Expand Down Expand Up @@ -12736,12 +12751,12 @@
\begin{itemdescr}
\pnum
\effects
\begin{itemize}
\item
Releases any shared state\iref{futures.state};
\item
calls \tcode{packaged_task(std::move(rhs)).swap(*this)}.
\end{itemize}
Equivalent to
\tcode{packaged_task(std::move(rhs)).swap(*this)}.

\pnum
\returns
\tcode{*this}.
\end{itemdescr}

\indexlibrarydtor{packaged_task}%
Expand Down
3 changes: 2 additions & 1 deletion source/time.tex
Original file line number Diff line number Diff line change
Expand Up @@ -1015,7 +1015,8 @@
\tcode{C1::is_steady} &
\tcode{const bool} &
\tcode{true} if \tcode{t1 <= t2} is always \tcode{true} and the time between clock
ticks is constant, otherwise \tcode{false}. \\ \rowsep
ticks is constant, otherwise \tcode{false}.
\tcode{C1::is_steady} shall be usable in constant expressions\iref{expr.const}. \\ \rowsep

\tcode{C1::now()} &
\tcode{C1::time_point} &
Expand Down
3 changes: 2 additions & 1 deletion source/utilities.tex
Original file line number Diff line number Diff line change
Expand Up @@ -2463,7 +2463,8 @@

\pnum
\effects
Equivalent to the preceding constructors except that each element is constructed with
Equivalent to the preceding constructors
except that each element of non-reference type is constructed with
uses-allocator construction\iref{allocator.uses.construction}.
\end{itemdescr}

Expand Down
Loading