Given simd<T, A> where T is an unscoped enum (U is a shorthand for std::underlying_type_t<T>):
[x] mask_type is simd<U, A>::mask_type
[x] implicit broadcast ctor from T
[x] explicit cvt ctor from simd<U, A> (enables explicit broadcast from U and int)
[ ] P????: explicit cvt ctor from simd<T1, A1>, requires simd_size_v<T, A> == simd_size_v<T1, A1>
[x] generator ctor, where generator return type must be T
[x] explicit load ctor and member function from const T* and const U*
[x] store member function to T* and U*
[x] subscript access to elements of T
[ ] unary operators !, +, and -, defined in such a way that program-defined non-member overloads of those operators take precedence. ! returns mask_type, + and - return simd<U, A>.
Given
simd<T, A>
whereT
is an unscoped enum (U
is a shorthand forstd::underlying_type_t<T>
):mask_type
issimd<U, A>::mask_type
T
simd<U, A>
(enables explicit broadcast fromU
andint
)simd<T1, A1>
, requiressimd_size_v<T, A> == simd_size_v<T1, A1>
T
const T*
andconst U*
T*
andU*
T
!
,+
, and-
, defined in such a way that program-defined non-member overloads of those operators take precedence.!
returnsmask_type
,+
and-
returnsimd<U, A>
.simd<U, A>
+
,-
,*
,/
,%
,&
,|
,^
,<<
,>>
,==
,!=
,<
,<=
,>
, and>=
mask_type
, the remaining binary operators returnsimd<U, A>
simd<T, A>
, the other operand has to be convertible tosimd<U, A>
(which includessimd<T, A>
)<<
and>>
where the type of the second operand isint
operator?:
overloads forbool
andmask_type
bool
overload is short-circuiting and definessimd<U, A>
as the common type forsimd<T, A>
and any type convertible tosimd<U, A>
mask_type
overload blends two objects of typesimd<T, A>
.mask_type
conditional operator take precedenceconstexpr
except loads and stores