Skip to content

Commit 0189a86

Browse files
committed
[2025-02 LWG Motion 11] P3430R3 simd issues: explicit, unsequenced, identity-element position, and members of disabled simd
1 parent 805aac8 commit 0189a86

File tree

1 file changed

+23
-24
lines changed

1 file changed

+23
-24
lines changed

source/numerics.tex

+23-24
Original file line numberDiff line numberDiff line change
@@ -16901,7 +16901,7 @@
1690116901
constexpr basic_simd() noexcept = default;
1690216902

1690316903
// \ref{simd.ctor}, \tcode{basic_simd} constructors
16904-
template<class U> constexpr basic_simd(U&& value) noexcept;
16904+
template<class U> constexpr explicit(@\seebelow@) basic_simd(U&& value) noexcept;
1690516905
template<class U, class UAbi>
1690616906
constexpr explicit(@\seebelow@) basic_simd(const basic_simd<U, UAbi>&) noexcept;
1690716907
template<class G> constexpr explicit basic_simd(G&& gen) noexcept;
@@ -16995,7 +16995,7 @@
1699516995

1699616996
\pnum
1699716997
\recommended
16998-
Implementations should support explicit conversions between specializations of
16998+
Implementations should support implicit conversions between specializations of
1699916999
\tcode{basic_simd} and appropriate \impldef{conversions of \tcode{basic_simd}
1700017000
from/to implementation-specific vector types} types.
1700117001
\begin{note}
@@ -17006,7 +17006,7 @@
1700617006
\rSec3[simd.ctor]{\tcode{basic_simd} constructors}
1700717007

1700817008
\begin{itemdecl}
17009-
template<class U> constexpr basic_simd(U&&) noexcept;
17009+
template<class U> constexpr explicit(@\seebelow@) basic_simd(U&& value) noexcept;
1701017010
\end{itemdecl}
1701117011

1701217012
\begin{itemdescr}
@@ -17015,24 +17015,29 @@
1701517015

1701617016
\pnum
1701717017
\constraints
17018-
\tcode{From} satisfies \tcode{convertible_to<value_type>}, and either
17018+
\tcode{value_type} satisfies \tcode{constructible_from<U>}.
17019+
17020+
\pnum
17021+
\effects
17022+
Initializes each element to the value of the argument after conversion to
17023+
\tcode{value_type}.
17024+
17025+
\pnum
17026+
\remarks
17027+
The expression inside \tcode{explicit} evaluates to \tcode{false} if and only if
17028+
\tcode{U} satisfies \tcode{convertible_to<value_type>}, and either
1701917029
\begin{itemize}
17030+
\item
17031+
\tcode{From} is not an arithmetic type and does not satisfy
17032+
\exposconcept{constexpr-wrapper-like},
1702017033
\item
1702117034
\tcode{From} is an arithmetic type and the conversion from \tcode{From} to
1702217035
\tcode{value_type} is value-preserving\iref{simd.general}, or
1702317036
\item
17024-
\tcode{From} is not an arithmetic type and does not satisfy
17025-
\tcode{\exposconcept{constexpr-wrapper-like}}, or
17026-
\item
17027-
\tcode{From} satisfies \tcode{\exposconcept{constexpr-wrapper-like}},
17037+
\tcode{From} satisfies \exposconcept{constexpr-wrapper-like},
1702817038
\tcode{remove_const_t<decltype(From::value)>} is an arithmetic type, and
1702917039
\tcode{From::value} is representable by \tcode{value_type}.
1703017040
\end{itemize}
17031-
17032-
\pnum
17033-
\effects
17034-
Initializes each element to the value of the argument after conversion to
17035-
\tcode{value_type}.
1703617041
\end{itemdescr}
1703717042

1703817043
\begin{itemdecl}
@@ -17069,7 +17074,7 @@
1706917074
\end{itemdescr}
1707017075

1707117076
\begin{itemdecl}
17072-
template<class G> constexpr explicit basic_simd(G&& gen) noexcept;
17077+
template<class G> constexpr explicit basic_simd(G&& gen);
1707317078
\end{itemdecl}
1707417079

1707517080
\begin{itemdescr}
@@ -17093,10 +17098,7 @@
1709317098

1709417099
\pnum
1709517100
\remarks
17096-
The calls to \tcode{gen} are unsequenced with respect to each other.
17097-
Vectorization-unsafe\iref{algorithms.parallel.defns} standard library functions
17098-
may not be invoked by \tcode{gen}.
17099-
\tcode{gen} is invoked exactly once for each $i$.
17101+
\tcode{gen} is invoked exactly once for each $i$, in increasing order of $i$.
1710017102
\end{itemdescr}
1710117103

1710217104
\begin{itemdecl}
@@ -18544,7 +18546,7 @@
1854418546
\tcode{basic_simd_mask<Bytes, Abi>} is trivially copyable.
1854518547

1854618548
\pnum
18547-
\recommended Implementations should support explicit conversions between
18549+
\recommended Implementations should support implicit conversions between
1854818550
specializations of \tcode{basic_simd_mask} and appropriate \impldef{conversions
1854918551
of \tcode{basic_simd_mask} from/to implementation-specific vector types} types.
1855018552
\begin{note}
@@ -18582,7 +18584,7 @@
1858218584
\end{itemdescr}
1858318585

1858418586
\begin{itemdecl}
18585-
template<class G> constexpr explicit basic_simd_mask(G&& gen) noexcept;
18587+
template<class G> constexpr explicit basic_simd_mask(G&& gen);
1858618588
\end{itemdecl}
1858718589

1858818590
\begin{itemdescr}
@@ -18600,10 +18602,7 @@
1860018602

1860118603
\pnum
1860218604
\remarks
18603-
The calls to \tcode{gen} are unsequenced with respect to each other.
18604-
Vectorization-unsafe\iref{algorithms.parallel.defns} standard library
18605-
functions may not be invoked by \tcode{gen}.
18606-
\tcode{gen} is invoked exactly once for each $i$.
18605+
\tcode{gen} is invoked exactly once for each $i$, in increasing order of $i$.
1860718606
\end{itemdescr}
1860818607

1860918608
\rSec3[simd.mask.subscr]{\tcode{basic_simd_mask} subscript operator}

0 commit comments

Comments
 (0)