Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
e22a4ce
LWG4137 Fix Mandates, Preconditions, and Complexity elements of [lina…
eisenwave Nov 14, 2025
bc1a399
LWG4243 as_bytes/as_writable_bytes is broken with span<volatile T>
eisenwave Nov 14, 2025
0581ef8
LWG4315 Insufficient specification of vector_two_norm and matrix_frob…
eisenwave Nov 14, 2025
cc9c07f
LWG4423 meta::data_member_spec allows negative bit-field widths
eisenwave Nov 14, 2025
cace6f2
LWG2991 variant copy constructor missing noexcept(see below)
eisenwave Nov 14, 2025
58039b6
LWG3090 What is §[time.duration.cons]p4's "no overflow is induced in …
eisenwave Nov 14, 2025
ab8de53
LWG3627 Inconsistent specifications for std::make_optional overloads
eisenwave Nov 14, 2025
8cb5454
LWG4020 extents::index-cast weirdness
eisenwave Nov 14, 2025
99621a8
LWG4136 Specify behavior of [linalg] Hermitian algorithms on diagonal…
eisenwave Nov 14, 2025
c01113c
LWG4166 concat_view::end() should be more constrained in order to sup…
eisenwave Nov 14, 2025
9547537
LWG4253 basic_const_iterator should provide iterator_type
eisenwave Nov 14, 2025
baf86a5
LWG4255 move_only_function constructor should recognize empty copyabl…
eisenwave Nov 14, 2025
870a550
LWG4256 Incorrect constrains for function_ref constructors from nonty…
eisenwave Nov 14, 2025
37d47ff
LWG4257 Stream insertion for chrono::local_time should be constrained
eisenwave Nov 14, 2025
0160ba0
LWG4265 std::midpoint should not accept const bool
eisenwave Nov 14, 2025
a97836c
LWG4266 layout_stride::mapping should treat empty mappings as exhaustive
eisenwave Nov 14, 2025
8c2382e
LWG4269 unique_copy passes arguments to its predicate backwards
eisenwave Nov 14, 2025
1ae30ce
LWG4274 The chrono::hh_mm_ss constructor is ill-formed for unsigned d…
eisenwave Nov 14, 2025
f5efd1f
LWG4275 std::dynamic_extent should also be defined in <mdspan>
eisenwave Nov 14, 2025
44db8ec
LWG4276 front() and back() are not hardened for zero-length std::arrays
eisenwave Nov 14, 2025
e85ad9c
LWG4280 simd::partial_load uses undefined identifier T
eisenwave Nov 14, 2025
63375ae
Fixup: replace "basic_simd" with "basic_vec"
eisenwave Nov 14, 2025
86e42c1
LWG4286 Some more feature-test macros for fully freestanding features…
eisenwave Nov 14, 2025
2db4d39
LWG4291 explicit map(const Allocator&) should be constexpr
eisenwave Nov 14, 2025
9dde31f
LWG4292 Unordered container local iterators should be constexpr itera…
eisenwave Nov 14, 2025
4609922
LWG4293 span::subspan/first/last chooses wrong constructor when T is …
eisenwave Nov 14, 2025
8307b2d
LWG4294 bitset(const CharT*) constructor needs to be constrained
eisenwave Nov 14, 2025
cfe7d12
LWG4297 Missing permutable constraint for iterator overloads in Paral…
eisenwave Nov 14, 2025
a76eff3
LWG4299 Missing Mandates: part in optional<T&>::transform
eisenwave Nov 14, 2025
b3571eb
LWG4301 condition_variable{_any}::wait_{for, until} should take timeo…
eisenwave Nov 14, 2025
5e3cf4a
LWG4305 Missing user requirements on type_order template
eisenwave Nov 14, 2025
d84acb2
LWG4312 Const and value category mismatch for allocator_arg_t/allocat…
eisenwave Nov 14, 2025
e1cf4de
LWG4317 The meaning of "resource" in the Cpp17Destructible requiremen…
eisenwave Nov 14, 2025
aa103b9
LWG4318 Have hive::erase_if reevaluate end() to avoid UB
eisenwave Nov 14, 2025
71741b9
LWG4328 Remove note in §[exec.sched] regarding waiting for completion…
eisenwave Nov 14, 2025
ad18b13
LWG4340 task::promise_type::unhandled_stopped() should be noexcept
eisenwave Nov 14, 2025
c50b85a
LWG4341 Missing rvalue reference qualification for task::connect()
eisenwave Nov 14, 2025
d20e5b6
LWG4342 Missing rvalue reference qualification for task_scheduler::ts…
eisenwave Nov 14, 2025
4cf316a
LWG4343 Missing default template arguments for task
eisenwave Nov 14, 2025
08f8664
LWG4345 task::promise_type::return_value default template parameter
eisenwave Nov 14, 2025
975b0e5
LWG4346 task::promise_type::return_void/value lack a specification
eisenwave Nov 14, 2025
7d72869
LWG4349 task is not actually started lazily
eisenwave Nov 14, 2025
ebacf09
LWG4351 integral-constant-like needs more remove_cvref_t
eisenwave Nov 14, 2025
9b261a1
LWG4366 Heterogeneous comparison of expected may be ill-formed
eisenwave Nov 14, 2025
ddfbfb9
LWG4370 Comparison of optional<T> to T may be ill-formed
eisenwave Nov 14, 2025
c840801
LWG4372 Weaken Mandates: for dynamic padding values in padded layouts
eisenwave Nov 14, 2025
234600e
LWG4375 std::simd::bit_ceil should not be noexcept
eisenwave Nov 14, 2025
7faca53
LWG4377 Misleading note about lock-free property of std::atomic_ref
eisenwave Nov 14, 2025
bbb371f
LWG4382 The simd::basic_mask(bool) overload needs to be more constrained
eisenwave Nov 14, 2025
fc30e35
LWG4384 flat_set::erase(iterator) is underconstrained
eisenwave Nov 14, 2025
c239732
LWG4398 enable_nonlocking_formatter_optimization should be disabled f…
eisenwave Nov 14, 2025
6eeedf5
LWG4399 enable_nonlocking_formatter_optimization for pair and tuple n…
eisenwave Nov 14, 2025
424c4c1
LWG4403 simd::basic_vec CTAD misses difference type casting
eisenwave Nov 14, 2025
508ca2e
LWG4407 constexpr-wrapper-like needs remove_cvref_t in simd::basic_ve…
eisenwave Nov 14, 2025
a93eefb
LWG4412 Fix declaration of zero_element and uninit_element
eisenwave Nov 14, 2025
371741a
LWG4413 Unused/left-over simd::alignment specialization for basic_mask
eisenwave Nov 14, 2025
55f56f9
LWG4415 task::promise_type::uncaught_exception seems to be misnamed
eisenwave Nov 14, 2025
50869a2
LWG4416 <meta> should include <compare>
eisenwave Nov 14, 2025
05d3236
LWG4422 meta::access_context should be a consteval-only type
eisenwave Nov 14, 2025
0f25dc9
LWG4425 CTAD function_ref of data member pointer should produce noexc…
eisenwave Nov 14, 2025
d7cb114
LWG4426 Clarify what meta::reflect_constant_string considers a string…
eisenwave Nov 14, 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
16 changes: 11 additions & 5 deletions source/algorithms.tex
Original file line number Diff line number Diff line change
Expand Up @@ -2355,7 +2355,8 @@

template<@\exposconcept{execution-policy}@ Ep, @\libconcept{random_access_iterator}@ I, @\libconcept{sized_sentinel_for}@<I> S,
class Proj = identity, class T = projected_value_t<I, Proj>>
requires @\libconcept{indirect_binary_predicate}@<ranges::equal_to, projected<I, Proj>, const T*>
requires @\libconcept{permutable}@<I> &&
@\libconcept{indirect_binary_predicate}@<ranges::equal_to, projected<I, Proj>, const T*>
subrange<I> remove(Ep&& exec, I first, S last, const T& value,
Proj proj = {}); // freestanding-deleted
template<@\exposconcept{execution-policy}@ Ep, @\exposconcept{sized-random-access-range}@ R, class Proj = identity,
Expand All @@ -2377,6 +2378,7 @@

template<@\exposconcept{execution-policy}@ Ep, @\libconcept{random_access_iterator}@ I, @\libconcept{sized_sentinel_for}@<I> S,
class Proj = identity, @\libconcept{indirect_unary_predicate}@<projected<I, Proj>> Pred>
requires @\libconcept{permutable}@<I>
subrange<I>
remove_if(Ep&& exec, I first, S last, Pred pred, Proj proj = {}); // freestanding-deleted
template<@\exposconcept{execution-policy}@ Ep, @\exposconcept{sized-random-access-range}@ R, class Proj = identity,
Expand Down Expand Up @@ -3217,6 +3219,7 @@

template<@\exposconcept{execution-policy}@ Ep, @\libconcept{random_access_iterator}@ I, @\libconcept{sized_sentinel_for}@<I> S,
class Proj = identity, @\libconcept{indirect_unary_predicate}@<projected<I, Proj>> Pred>
requires @\libconcept{permutable}@<I>
subrange<I>
partition(Ep&& exec, I first, S last, Pred pred, Proj proj = {}); // freestanding-deleted
template<@\exposconcept{execution-policy}@ Ep, @\exposconcept{sized-random-access-range}@ R, class Proj = identity,
Expand Down Expand Up @@ -7561,7 +7564,8 @@

template<@\exposconcept{execution-policy}@ Ep, @\libconcept{random_access_iterator}@ I, @\libconcept{sized_sentinel_for}@<I> S,
class Proj = identity, class T = projected_value_t<I, Proj>>
requires @\libconcept{indirect_binary_predicate}@<ranges::equal_to, projected<I, Proj>, const T*>
requires @\libconcept{permutable}@<I> &&
@\libconcept{indirect_binary_predicate}@<ranges::equal_to, projected<I, Proj>, const T*>
subrange<I>
ranges::remove(Ep&& exec, I first, S last, const T& value, Proj proj = {});
template<@\exposconcept{execution-policy}@ Ep, @\exposconcept{sized-random-access-range}@ R, class Proj = identity,
Expand All @@ -7583,6 +7587,7 @@

template<@\exposconcept{execution-policy}@ Ep, @\libconcept{random_access_iterator}@ I, @\libconcept{sized_sentinel_for}@<I> S,
class Proj = identity, @\libconcept{indirect_unary_predicate}@<projected<I, Proj>> Pred>
requires @\libconcept{permutable}@<I>
subrange<I>
ranges::remove_if(Ep&& exec, I first, S last, Pred pred, Proj proj = {});
template<@\exposconcept{execution-policy}@ Ep, @\exposconcept{sized-random-access-range}@ R, class Proj = identity,
Expand Down Expand Up @@ -7943,10 +7948,10 @@
\begin{itemize}
\setlength{\emergencystretch}{1em}
\item
\tcode{bool(pred(*i, *(i - 1)))}
\tcode{bool(pred(*(i - 1), *i))}
for the overloads in namespace \tcode{std};
\item
\tcode{bool(invoke(comp, invoke(proj, *i), invoke(proj, *(i - 1))))}
\tcode{bool(invoke(comp, invoke(proj, *(i - 1)), invoke(proj, *i)))}
for the overloads in namespace \tcode{ranges}.
\end{itemize}

Expand Down Expand Up @@ -9696,6 +9701,7 @@

template<@\exposconcept{execution-policy}@ Ep, @\libconcept{random_access_iterator}@ I, @\libconcept{sized_sentinel_for}@<I> S,
class Proj = identity, @\libconcept{indirect_unary_predicate}@<projected<I, Proj>> Pred>
requires @\libconcept{permutable}@<I>
subrange<I> ranges::partition(Ep&& exec, I first, S last, Pred pred, Proj proj = {});
template<@\exposconcept{execution-policy}@ Ep, @\exposconcept{sized-random-access-range}@ R, class Proj = identity,
@\libconcept{indirect_unary_predicate}@<projected<iterator_t<R>, Proj>> Pred>
Expand Down Expand Up @@ -13343,7 +13349,7 @@
\begin{itemdescr}
\pnum
\constraints
\tcode{T} is an arithmetic type other than \tcode{bool}.
\tcode{T} is an arithmetic type other than \cv{}~\tcode{bool}.

\pnum
\returns
Expand Down
83 changes: 61 additions & 22 deletions source/containers.tex
Original file line number Diff line number Diff line change
Expand Up @@ -6335,10 +6335,6 @@
In the case that \tcode{N == 0}, \tcode{begin() == end() ==} unique value.
The return value of \tcode{data()} is unspecified.

\pnum
The effect of calling \tcode{front()} or \tcode{back()} for a zero-sized array is
undefined.

\pnum
Member function \tcode{swap()} shall have a
non-throwing exception specification.
Expand Down Expand Up @@ -8975,7 +8971,7 @@
Equivalent to:
\begin{codeblock}
auto original_size = c.size();
for (auto i = c.begin(), last = c.end(); i != last; ) {
for (auto i = c.begin(); i != c.end(); ) {
if (pred(*i)) {
i = c.erase(i);
} else {
Expand Down Expand Up @@ -11572,7 +11568,7 @@
const Allocator& = Allocator());
constexpr map(const map& x);
constexpr map(map&& x);
explicit map(const Allocator&);
constexpr explicit map(const Allocator&);
constexpr map(const map&, const type_identity_t<Allocator>&);
constexpr map(map&&, const type_identity_t<Allocator>&);
constexpr map(initializer_list<value_type>, const Compare& = Compare(),
Expand Down Expand Up @@ -13449,7 +13445,8 @@
is additional semantic information.

\pnum
The types \tcode{iterator} and \tcode{const_iterator} meet
The types \tcode{iterator}, \tcode{const_iterator},
\tcode{local_iterator}, and \tcode{const_local_iterator} meet
the constexpr iterator requirements\iref{iterator.requirements.general}.

\indexlibraryglobal{unordered_map}%
Expand Down Expand Up @@ -14244,7 +14241,8 @@
there is additional semantic information.

\pnum
The types \tcode{iterator} and \tcode{const_iterator} meet
The types \tcode{iterator}, \tcode{const_iterator},
\tcode{local_iterator}, and \tcode{const_local_iterator} meet
the constexpr iterator requirements\iref{iterator.requirements.general}.

\indexlibraryglobal{unordered_multimap}%
Expand Down Expand Up @@ -14734,7 +14732,8 @@
is additional semantic information.

\pnum
The types \tcode{iterator} and \tcode{const_iterator} meet
The types \tcode{iterator}, \tcode{const_iterator},
\tcode{local_iterator}, and \tcode{const_local_iterator} meet
the constexpr iterator requirements\iref{iterator.requirements.general}.

\indexlibraryglobal{unordered_set}%
Expand Down Expand Up @@ -15154,7 +15153,8 @@
is additional semantic information.

\pnum
The types \tcode{iterator} and \tcode{const_iterator} meet
The types \tcode{iterator}, \tcode{const_iterator},
\tcode{local_iterator}, and \tcode{const_local_iterator} meet
the constexpr iterator requirements\iref{iterator.requirements.general}.

\indexlibraryglobal{unordered_multiset}%
Expand Down Expand Up @@ -15627,6 +15627,9 @@
template<class charT, class T, @\libconcept{formattable}@<charT> Container>
struct formatter<queue<T, Container>, charT>;

template<class T, class Container>
constexpr bool enable_nonlocking_formatter_optimization<queue<T, Container>> = false;

// \ref{priority.queue}, class template \tcode{priority_queue}
template<class T, class Container = vector<T>,
class Compare = less<typename Container::value_type>>
Expand All @@ -15641,6 +15644,10 @@
// \ref{container.adaptors.format}, formatter specialization for \tcode{priority_queue}
template<class charT, class T, @\libconcept{formattable}@<charT> Container, class Compare>
struct formatter<priority_queue<T, Container, Compare>, charT>;

template<class T, class Container, class Compare>
constexpr bool
enable_nonlocking_formatter_optimization<priority_queue<T, Container, Compare>> = false;
}
\end{codeblock}

Expand Down Expand Up @@ -16552,6 +16559,9 @@
// \ref{container.adaptors.format}, formatter specialization for \tcode{stack}
template<class charT, class T, @\libconcept{formattable}@<charT> Container>
struct formatter<stack<T, Container>, charT>;

template<class T, class Container>
constexpr bool enable_nonlocking_formatter_optimization<stack<T, Container>> = false;
}
\end{codeblock}

Expand Down Expand Up @@ -19040,7 +19050,7 @@
constexpr container_type extract() &&;
constexpr void replace(container_type&&);

constexpr iterator erase(iterator position);
constexpr iterator erase(iterator position) requires (!@\libconcept{same_as}@<iterator, const_iterator>);
constexpr iterator erase(const_iterator position);
constexpr size_type erase(const key_type& x);
template<class K> constexpr size_type erase(K&& x);
Expand Down Expand Up @@ -19711,7 +19721,7 @@
constexpr container_type extract() &&;
constexpr void replace(container_type&&);

constexpr iterator erase(iterator position);
constexpr iterator erase(iterator position) requires (!@\libconcept{same_as}@<iterator, const_iterator>);
constexpr iterator erase(const_iterator position);
constexpr size_type erase(const key_type& x);
template<class K> constexpr size_type erase(K&& x);
Expand Down Expand Up @@ -20160,6 +20170,10 @@
The header \libheaderref{mdspan} defines the class template \tcode{mdspan} and
other facilities for interacting with these multidimensional views.

\pnum
In addition to being available via inclusion of the \libheaderref{span} header,
\tcode{dynamic_extent} is available when the header \libheaderref{mdspan} is included.

\rSec2[views.contiguous]{Contiguous access}

\rSec3[span.syn]{Header \tcode{<span>} synopsis}%
Expand All @@ -20176,7 +20190,7 @@
template<class T>
concept @\defexposconcept{integral-constant-like}@ = // \expos
is_integral_v<remove_cvref_t<decltype(T::value)>> &&
!is_same_v<bool, remove_const_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 &&
Expand Down Expand Up @@ -20643,7 +20657,7 @@

\pnum
\effects
Equivalent to: \tcode{return R\{data(), Count\};}
Equivalent to: \tcode{return R(data(), Count);}
where \tcode{R} is the return type.
\end{itemdescr}

Expand All @@ -20663,7 +20677,7 @@

\pnum
\effects
Equivalent to: \tcode{return R\{data() + (size() - Count), Count\};}
Equivalent to: \tcode{return R(data() + (size() - Count), Count);}
where \tcode{R} is the return type.
\end{itemdescr}

Expand Down Expand Up @@ -20718,7 +20732,8 @@

\pnum
\effects
Equivalent to: \tcode{return \{data(), count\};}
Equivalent to: \tcode{return R(data(), count);}
where \tcode{R} is the return type.
\end{itemdescr}

\indexlibrarymember{span}{last}%
Expand All @@ -20733,7 +20748,8 @@

\pnum
\effects
Equivalent to: \tcode{return \{data() + (size() - count), count\};}
Equivalent to: \tcode{return R(data() + (size() - count), count);}
where \tcode{R} is the return type.
\end{itemdescr}

\indexlibrarymember{span}{subspan}%
Expand All @@ -20754,8 +20770,9 @@
\effects
Equivalent to:
\begin{codeblock}
return {data() + offset, count == dynamic_extent ? size() - offset : count};
return R(data() + offset, count == dynamic_extent ? size() - offset : count);
\end{codeblock}
where \tcode{R} is the return type.
\end{itemdescr}

\rSec4[span.obs]{Observers}
Expand Down Expand Up @@ -20958,6 +20975,10 @@
\end{itemdecl}

\begin{itemdescr}
\pnum
\constraints
\tcode{is_volatile_v<ElementType>} is \tcode{false}.

\pnum
\effects
Equivalent to: \tcode{return R\{reinterpret_cast<const byte*>(s.data()), s.size_bytes()\};}
Expand All @@ -20974,7 +20995,8 @@
\begin{itemdescr}
\pnum
\constraints
\tcode{is_const_v<ElementType>} is \tcode{false}.
\tcode{is_const_v<ElementType>} is \tcode{false} and
\tcode{is_volatile_v<ElementType>} is \tcode{false}.

\pnum
\effects
Expand Down Expand Up @@ -21245,7 +21267,7 @@
\effects
\begin{itemize}
\item
If \tcode{OtherIndexType} is an integral type other than \tcode{bool},
If \tcode{remove_cvref_t<OtherIndexType>} is an integral type other than \tcode{bool},
then equivalent to \tcode{return i;},
\item
otherwise, equivalent to \tcode{return static_cast<index_type>(i);}.
Expand Down Expand Up @@ -22599,7 +22621,7 @@
constexpr index_type operator()(Indices...) const noexcept;

static constexpr bool is_always_unique() noexcept { return true; }
static constexpr bool is_always_exhaustive() noexcept { return false; }
static constexpr bool is_always_exhaustive() noexcept;
static constexpr bool is_always_strided() noexcept { return true; }

static constexpr bool is_unique() noexcept { return true; }
Expand Down Expand Up @@ -22882,6 +22904,20 @@
\end{codeblock}
\end{itemdescr}

\indexlibrarymember{is_always_exhaustive}{layout_stride::mapping}%
\begin{itemdecl}
static constexpr bool is_always_exhaustive() noexcept;
\end{itemdecl}

\begin{itemdescr}
\pnum
\returns
\tcode{true} if \exposid{rank_} is 0
or if there is a rank index \tcode{r} of \tcode{extents()}
such that \tcode{extents_type::stat\-ic_extent(r)} is 0,
otherwise \tcode{false}.
\end{itemdescr}

\indexlibrarymember{is_exhaustive}{layout_stride::mapping}%
\begin{itemdecl}
constexpr bool is_exhaustive() const noexcept;
Expand All @@ -22892,7 +22928,8 @@
\returns
\begin{itemize}
\item
\tcode{true} if \exposid{rank_} is 0.
\tcode{true} if \exposid{rank_} or the size of the multidimensional index space
\tcode{m.extents()} is 0.
\item
Otherwise, \tcode{true} if there is
a permutation $P$ of the integers in the range $[0, \exposid{rank_})$
Expand Down Expand Up @@ -23057,6 +23094,7 @@
then the size of the multidimensional index space \tcode{Extents()}
is representable as a value of type \tcode{index_type}.
\item
If \tcode{padding_value} is not equal to \tcode{dynamic_extent}, then
\tcode{padding_value} is representable as a value of type \tcode{index_type}.
\item
If
Expand Down Expand Up @@ -23683,6 +23721,7 @@
then the size of the multidimensional index space \tcode{Extents()}
is representable as a value of type \tcode{index_type}.
\item
If \tcode{padding_value} is not equal to \tcode{dynamic_extent}, then
\tcode{padding_value} is representable as a value of type \tcode{index_type}.
\item
If
Expand Down
Loading