diff --git a/source/numerics.tex b/source/numerics.tex index 60e899a870..01493894d2 100644 --- a/source/numerics.tex +++ b/source/numerics.tex @@ -17204,7 +17204,7 @@ constexpr basic_simd() noexcept = default; // \ref{simd.ctor}, \tcode{basic_simd} constructors - template constexpr basic_simd(U&& value) noexcept; + template constexpr explicit(@\seebelow@) basic_simd(U&& value) noexcept; template constexpr explicit(@\seebelow@) basic_simd(const basic_simd&) noexcept; template constexpr explicit basic_simd(G&& gen) noexcept; @@ -17310,7 +17310,7 @@ \pnum \recommended -Implementations should support explicit conversions between specializations of +Implementations should support implicit conversions between specializations of \tcode{basic_simd} and appropriate \impldef{conversions of \tcode{basic_simd} from/to implementation-specific vector types} types. \begin{note} @@ -17321,7 +17321,7 @@ \rSec3[simd.ctor]{\tcode{basic_simd} constructors} \begin{itemdecl} -template constexpr basic_simd(U&&) noexcept; +template constexpr explicit(@\seebelow@) basic_simd(U&& value) noexcept; \end{itemdecl} \begin{itemdescr} @@ -17330,24 +17330,29 @@ \pnum \constraints -\tcode{From} satisfies \tcode{convertible_to}, and either +\tcode{value_type} satisfies \tcode{constructible_from}. + +\pnum +\effects +Initializes each element to the value of the argument after conversion to +\tcode{value_type}. + +\pnum +\remarks +The expression inside \tcode{explicit} evaluates to \tcode{false} if and only if +\tcode{U} satisfies \tcode{convertible_to}, and either \begin{itemize} + \item + \tcode{From} is not an arithmetic type and does not satisfy + \exposconcept{constexpr-wrapper-like}, \item \tcode{From} is an arithmetic type and the conversion from \tcode{From} to \tcode{value_type} is value-preserving\iref{simd.general}, or \item - \tcode{From} is not an arithmetic type and does not satisfy - \tcode{\exposconcept{constexpr-wrapper-like}}, or - \item - \tcode{From} satisfies \tcode{\exposconcept{constexpr-wrapper-like}}, + \tcode{From} satisfies \exposconcept{constexpr-wrapper-like}, \tcode{remove_const_t} is an arithmetic type, and \tcode{From::value} is representable by \tcode{value_type}. \end{itemize} - -\pnum -\effects -Initializes each element to the value of the argument after conversion to -\tcode{value_type}. \end{itemdescr} \begin{itemdecl} @@ -17384,7 +17389,7 @@ \end{itemdescr} \begin{itemdecl} -template constexpr explicit basic_simd(G&& gen) noexcept; +template constexpr explicit basic_simd(G&& gen); \end{itemdecl} \begin{itemdescr} @@ -17408,10 +17413,7 @@ \pnum \remarks -The calls to \tcode{gen} are unsequenced with respect to each other. -Vectorization-unsafe\iref{algorithms.parallel.defns} standard library functions -may not be invoked by \tcode{gen}. -\tcode{gen} is invoked exactly once for each $i$. +\tcode{gen} is invoked exactly once for each $i$, in increasing order of $i$. \end{itemdescr} \begin{itemdecl} @@ -19180,7 +19182,7 @@ \tcode{basic_simd_mask} is trivially copyable. \pnum -\recommended Implementations should support explicit conversions between +\recommended Implementations should support implicit conversions between specializations of \tcode{basic_simd_mask} and appropriate \impldef{conversions of \tcode{basic_simd_mask} from/to implementation-specific vector types} types. \begin{note} @@ -19218,7 +19220,7 @@ \end{itemdescr} \begin{itemdecl} -template constexpr explicit basic_simd_mask(G&& gen) noexcept; +template constexpr explicit basic_simd_mask(G&& gen); \end{itemdecl} \begin{itemdescr} @@ -19236,10 +19238,7 @@ \pnum \remarks -The calls to \tcode{gen} are unsequenced with respect to each other. -Vectorization-unsafe\iref{algorithms.parallel.defns} standard library -functions may not be invoked by \tcode{gen}. -\tcode{gen} is invoked exactly once for each $i$. +\tcode{gen} is invoked exactly once for each $i$, in increasing order of $i$. \end{itemdescr} \rSec3[simd.mask.subscr]{\tcode{basic_simd_mask} subscript operator}