29 Numerics library [numerics]

29.10 Data-parallel types [simd]

29.10.2 Exposition-only types, variables, and concepts [simd.expos]

29.10.2.1 Exposition-only helpers [simd.expos.defn]

using simd-size-type = see below;
simd-size-type is an alias for a signed integer type.
template<size_t Bytes> using integer-from = see below;
integer-from<Bytes> is an alias for a signed integer type T such that sizeof(T) equals Bytes.
template<class T, class Abi> constexpr simd-size-type simd-size-v = see below;
simd-size-v<T, Abi> denotes the width of basic_vec<T, Abi> if the specialization basic_vec<T, Abi> is enabled, or 0 otherwise.
template<size_t Bytes, class Abi> constexpr simd-size-type mask-size-v = see below;
mask-size-v<Bytes, Abi> denotes the width of basic_mask<Bytes, Abi> if the specialization basic_mask<Bytes, Abi> is enabled, or 0 otherwise.
template<class T> constexpr size_t mask-element-size = see below;
mask-element-size<basic_mask<Bytes, Abi>> has the value Bytes.
template<class T> using deduced-vec-t = see below;
Let x denote an lvalue of type const T.
deduced-vec-t<T> is an alias for decltype(x + x).
template<class BinaryOperation, class T> concept reduction-binary-operation = requires (const BinaryOperation binary_op, const vec<T, 1> v) { { binary_op(v, v) } -> same_as<vec<T, 1>>; };
Types BinaryOperation and T model reduction-binary-operation<BinaryOperation, T> only if:
  • BinaryOperation is a binary element-wise operation and the operation is commutative.
  • An object of type BinaryOperation can be invoked with two arguments of type basic_vec<T, Abi>, with unspecified ABI tag Abi, returning a basic_vec<T, Abi>.