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
c5f0472
LWG4137 Fix Mandates, Preconditions, and Complexity elements of [lina…
eisenwave Nov 14, 2025
4501cc9
LWG4243 as_bytes/as_writable_bytes is broken with span<volatile T>
eisenwave Nov 14, 2025
3b51264
LWG4315 Insufficient specification of vector_two_norm and matrix_frob…
eisenwave Nov 14, 2025
95c9720
LWG4423 meta::data_member_spec allows negative bit-field widths
eisenwave Nov 14, 2025
0061d5e
LWG2991 variant copy constructor missing noexcept(see below)
eisenwave Nov 14, 2025
9fb0caa
LWG3090 What is §[time.duration.cons]p4's "no overflow is induced in …
eisenwave Nov 14, 2025
aca6910
LWG3627 Inconsistent specifications for std::make_optional overloads
eisenwave Nov 14, 2025
a1d129a
LWG4020 extents::index-cast weirdness
eisenwave Nov 14, 2025
0041fa9
LWG4136 Specify behavior of [linalg] Hermitian algorithms on diagonal…
eisenwave Nov 14, 2025
9b28728
LWG4166 concat_view::end() should be more constrained in order to sup…
eisenwave Nov 14, 2025
9851211
LWG4253 basic_const_iterator should provide iterator_type
eisenwave Nov 14, 2025
5d98fb2
LWG4255 move_only_function constructor should recognize empty copyabl…
eisenwave Nov 14, 2025
7e7ef84
LWG4256 Incorrect constrains for function_ref constructors from nonty…
eisenwave Nov 14, 2025
6d0148f
LWG4257 Stream insertion for chrono::local_time should be constrained
eisenwave Nov 14, 2025
d06291c
LWG4265 std::midpoint should not accept const bool
eisenwave Nov 14, 2025
898f9d8
LWG4266 layout_stride::mapping should treat empty mappings as exhaustive
eisenwave Nov 14, 2025
02fe17d
LWG4269 unique_copy passes arguments to its predicate backwards
eisenwave Nov 14, 2025
6afbbe9
LWG4274 The chrono::hh_mm_ss constructor is ill-formed for unsigned d…
eisenwave Nov 14, 2025
38461d8
LWG4275 std::dynamic_extent should also be defined in <mdspan>
eisenwave Nov 14, 2025
f824e75
LWG4276 front() and back() are not hardened for zero-length std::arrays
eisenwave Nov 14, 2025
7a7e754
LWG4280 simd::partial_load uses undefined identifier T
eisenwave Nov 14, 2025
c34694e
Fixup: replace "basic_simd" with "basic_vec"
eisenwave Nov 14, 2025
a412c29
LWG4286 Some more feature-test macros for fully freestanding features…
eisenwave Nov 14, 2025
a9d3ff2
LWG4291 explicit map(const Allocator&) should be constexpr
eisenwave Nov 14, 2025
75b92ec
LWG4292 Unordered container local iterators should be constexpr itera…
eisenwave Nov 14, 2025
5fc285f
LWG4293 span::subspan/first/last chooses wrong constructor when T is …
eisenwave Nov 14, 2025
b7664e3
LWG4294 bitset(const CharT*) constructor needs to be constrained
eisenwave Nov 14, 2025
ec5459d
LWG4297 Missing permutable constraint for iterator overloads in Paral…
eisenwave Nov 14, 2025
9447130
LWG4299 Missing Mandates: part in optional<T&>::transform
eisenwave Nov 14, 2025
d079ee8
LWG4301 condition_variable{_any}::wait_{for, until} should take timeo…
eisenwave Nov 14, 2025
7b4876c
LWG4305 Missing user requirements on type_order template
eisenwave Nov 14, 2025
a1079e2
LWG4312 Const and value category mismatch for allocator_arg_t/allocat…
eisenwave Nov 14, 2025
0236bd3
LWG4317 The meaning of "resource" in the Cpp17Destructible requiremen…
eisenwave Nov 14, 2025
19361bc
LWG4318 Have hive::erase_if reevaluate end() to avoid UB
eisenwave Nov 14, 2025
804cf0d
LWG4328 Remove note in §[exec.sched] regarding waiting for completion…
eisenwave Nov 14, 2025
7f8d8e3
LWG4340 task::promise_type::unhandled_stopped() should be noexcept
eisenwave Nov 14, 2025
237a7d6
LWG4341 Missing rvalue reference qualification for task::connect()
eisenwave Nov 14, 2025
55a1507
LWG4342 Missing rvalue reference qualification for task_scheduler::ts…
eisenwave Nov 14, 2025
2e12dba
LWG4343 Missing default template arguments for task
eisenwave Nov 14, 2025
8a958a9
LWG4345 task::promise_type::return_value default template parameter
eisenwave Nov 14, 2025
122c914
LWG4346 task::promise_type::return_void/value lack a specification
eisenwave Nov 14, 2025
14df1b4
LWG4349 task is not actually started lazily
eisenwave Nov 14, 2025
fe45c50
LWG4351 integral-constant-like needs more remove_cvref_t
eisenwave Nov 14, 2025
760ddc3
LWG4366 Heterogeneous comparison of expected may be ill-formed
eisenwave Nov 14, 2025
b86875a
LWG4370 Comparison of optional<T> to T may be ill-formed
eisenwave Nov 14, 2025
2ca745d
LWG4372 Weaken Mandates: for dynamic padding values in padded layouts
eisenwave Nov 14, 2025
72f0eb6
LWG4375 std::simd::bit_ceil should not be noexcept
eisenwave Nov 14, 2025
5d90066
LWG4377 Misleading note about lock-free property of std::atomic_ref
eisenwave Nov 14, 2025
262a612
LWG4269 FIXME unique_copy passes arguments to its predicate backwards…
eisenwave Nov 14, 2025
a4e645f
LWG4382 The simd::basic_mask(bool) overload needs to be more constrained
eisenwave Nov 14, 2025
18de194
LWG4384 flat_set::erase(iterator) is underconstrained
eisenwave Nov 14, 2025
792f591
LWG4398 enable_nonlocking_formatter_optimization should be disabled f…
eisenwave Nov 14, 2025
3c173c8
LWG4399 enable_nonlocking_formatter_optimization for pair and tuple n…
eisenwave Nov 14, 2025
a276575
LWG4403 simd::basic_vec CTAD misses difference type casting
eisenwave Nov 14, 2025
bc8a0f7
LWG4407 constexpr-wrapper-like needs remove_cvref_t in simd::basic_ve…
eisenwave Nov 14, 2025
3d6e18c
LWG4412 Fix declaration of zero_element and uninit_element
eisenwave Nov 14, 2025
9b4c347
LWG4413 Unused/left-over simd::alignment specialization for basic_mask
eisenwave Nov 14, 2025
465b263
LWG4415 task::promise_type::uncaught_exception seems to be misnamed
eisenwave Nov 14, 2025
135a799
LWG4416 <meta> should include <compare>
eisenwave Nov 14, 2025
9fae9f9
LWG4422 meta::access_context should be a consteval-only type
eisenwave Nov 14, 2025
a27684a
LWG4425 CTAD function_ref of data member pointer should produce noexc…
eisenwave Nov 14, 2025
39861b8
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.

Check failure on line 20175 in source/containers.tex

View workflow job for this annotation

GitHub Actions / Run checks on MacOS

containers.tex:20175:trailing whitespace: \tcode{dynamic_extent} is available when the header \libheaderref{mdspan} is included.

Check failure on line 20175 in source/containers.tex

View workflow job for this annotation

GitHub Actions / Run checks on Linux

containers.tex:20175:trailing whitespace: \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::static_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
Loading