Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 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
7e0b708
LWG2991 variant copy constructor missing noexcept(see below)
eisenwave Nov 14, 2025
a8168e0
LWG3090 What is §[time.duration.cons]p4's "no overflow is induced in …
eisenwave Nov 14, 2025
acc7c9d
LWG3627 Inconsistent specifications for std::make_optional overloads
eisenwave Nov 14, 2025
84c926c
LWG4020 extents::index-cast weirdness
eisenwave Nov 14, 2025
b3f5b46
LWG4136 Specify behavior of [linalg] Hermitian algorithms on diagonal…
eisenwave Nov 14, 2025
3d184fe
LWG4166 concat_view::end() should be more constrained in order to sup…
eisenwave Nov 14, 2025
61bc200
LWG4253 basic_const_iterator should provide iterator_type
eisenwave Nov 14, 2025
c971e83
LWG4255 move_only_function constructor should recognize empty copyabl…
eisenwave Nov 14, 2025
b4216f3
LWG4256 Incorrect constrains for function_ref constructors from nonty…
eisenwave Nov 14, 2025
4229bb8
LWG4257 Stream insertion for chrono::local_time should be constrained
eisenwave Nov 14, 2025
4f24fbb
LWG4265 std::midpoint should not accept const bool
eisenwave Nov 14, 2025
a4f5fa2
LWG4266 layout_stride::mapping should treat empty mappings as exhaustive
eisenwave Nov 14, 2025
84288fe
LWG4269 unique_copy passes arguments to its predicate backwards
eisenwave Nov 14, 2025
79f7776
LWG4274 The chrono::hh_mm_ss constructor is ill-formed for unsigned d…
eisenwave Nov 14, 2025
7769d5c
LWG4275 std::dynamic_extent should also be defined in <mdspan>
eisenwave Nov 14, 2025
adf72b3
LWG4276 front() and back() are not hardened for zero-length std::arrays
eisenwave Nov 14, 2025
b11345b
LWG4280 simd::partial_load uses undefined identifier T
eisenwave Nov 14, 2025
ce0998e
Fixup: replace "basic_simd" with "basic_vec"
eisenwave Nov 14, 2025
7b2d849
LWG4286 Some more feature-test macros for fully freestanding features…
eisenwave Nov 14, 2025
0a2d3a2
LWG4291 explicit map(const Allocator&) should be constexpr
eisenwave Nov 14, 2025
68d80a5
LWG4292 Unordered container local iterators should be constexpr itera…
eisenwave Nov 14, 2025
4344e6e
LWG4293 span::subspan/first/last chooses wrong constructor when T is …
eisenwave Nov 14, 2025
6ca13f3
LWG4294 bitset(const CharT*) constructor needs to be constrained
eisenwave Nov 14, 2025
6102746
LWG4297 Missing permutable constraint for iterator overloads in Paral…
eisenwave Nov 14, 2025
56b9ba2
LWG4299 Missing Mandates: part in optional<T&>::transform
eisenwave Nov 14, 2025
bfe0882
LWG4301 condition_variable{_any}::wait_{for, until} should take timeo…
eisenwave Nov 14, 2025
ba10456
LWG4305 Missing user requirements on type_order template
eisenwave Nov 14, 2025
bd7cf13
LWG4312 Const and value category mismatch for allocator_arg_t/allocat…
eisenwave Nov 14, 2025
10ce086
LWG4317 The meaning of "resource" in the Cpp17Destructible requiremen…
eisenwave Nov 14, 2025
83deeee
LWG4318 Have hive::erase_if reevaluate end() to avoid UB
eisenwave Nov 14, 2025
26af380
LWG4328 Remove note in §[exec.sched] regarding waiting for completion…
eisenwave Nov 14, 2025
5667168
LWG4340 task::promise_type::unhandled_stopped() should be noexcept
eisenwave Nov 14, 2025
7c6a26e
LWG4341 Missing rvalue reference qualification for task::connect()
eisenwave Nov 14, 2025
922a038
LWG4342 Missing rvalue reference qualification for task_scheduler::ts…
eisenwave Nov 14, 2025
b3a3867
LWG4343 Missing default template arguments for task
eisenwave Nov 14, 2025
f3fd091
LWG4345 task::promise_type::return_value default template parameter
eisenwave Nov 14, 2025
ad4de87
LWG4346 task::promise_type::return_void/value lack a specification
eisenwave Nov 14, 2025
ae0829f
LWG4349 task is not actually started lazily
eisenwave Nov 14, 2025
044017d
LWG4351 integral-constant-like needs more remove_cvref_t
eisenwave Nov 14, 2025
b719979
LWG4366 Heterogeneous comparison of expected may be ill-formed
eisenwave Nov 14, 2025
2d7e351
LWG4370 Comparison of optional<T> to T may be ill-formed
eisenwave Nov 14, 2025
5d46c18
LWG4372 Weaken Mandates: for dynamic padding values in padded layouts
eisenwave Nov 14, 2025
779f819
LWG4375 std::simd::bit_ceil should not be noexcept
eisenwave Nov 14, 2025
943988b
LWG4377 Misleading note about lock-free property of std::atomic_ref
eisenwave Nov 14, 2025
abc4335
LWG4269 FIXME unique_copy passes arguments to its predicate backwards…
eisenwave Nov 14, 2025
3eb32d7
LWG4382 The simd::basic_mask(bool) overload needs to be more constrained
eisenwave Nov 14, 2025
2663394
LWG4384 flat_set::erase(iterator) is underconstrained
eisenwave Nov 14, 2025
d607a3b
LWG4398 enable_nonlocking_formatter_optimization should be disabled f…
eisenwave Nov 14, 2025
6d2a624
LWG4399 enable_nonlocking_formatter_optimization for pair and tuple n…
eisenwave Nov 14, 2025
d078e20
LWG4403 simd::basic_vec CTAD misses difference type casting
eisenwave Nov 14, 2025
d97790e
LWG4407 constexpr-wrapper-like needs remove_cvref_t in simd::basic_ve…
eisenwave Nov 14, 2025
f3f531e
LWG4412 Fix declaration of zero_element and uninit_element
eisenwave Nov 14, 2025
4213480
LWG4413 Unused/left-over simd::alignment specialization for basic_mask
eisenwave Nov 14, 2025
f81af67
LWG4415 task::promise_type::uncaught_exception seems to be misnamed
eisenwave Nov 14, 2025
bf5563e
LWG4416 <meta> should include <compare>
eisenwave Nov 14, 2025
01a5886
LWG4422 meta::access_context should be a consteval-only type
eisenwave Nov 14, 2025
5dcd7ee
LWG4425 CTAD function_ref of data member pointer should produce noexc…
eisenwave Nov 14, 2025
8d09815
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
18 changes: 12 additions & 6 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 @@ -7839,7 +7844,7 @@
\pnum
Let \tcode{pred} be \tcode{equal_to\{\}}
for the overloads with no parameter \tcode{pred}, and
let $E$ be
let $E(\tcode{i})$ be
\begin{itemize}
\setlength{\emergencystretch}{1em}
\item
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();
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 \tcode{0}
or if there is a rank index \tcode{r} of \tcode{extents()}
such that \tcode{extents_type::stat\-ic_extent(r)} is \tcode{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