29 Numerics library [numerics]

29.10 Data-parallel types [simd]

29.10.4 simd type traits [simd.traits]

template<class T, class U = typename T::value_type> struct simd_alignment { see below };
simd_alignment<T, U> has a member value if and only if
  • T is a specialization of basic_simd_mask and U is bool, or
  • T is a specialization of basic_simd and U is a vectorizable type.
If value is present, the type simd_alignment<T, U> is a BinaryTypeTrait with a base characteristic of integral_constant<size_t, N> for some unspecified N ([simd.ctor], [simd.loadstore])).
[Note 1: 
value identifies the alignment restrictions on pointers used for (converting) loads and stores for the given type T on arrays of type U.
— end note]
The behavior of a program that adds specializations for simd_alignment is undefined.
template<class T, class V> struct rebind_simd { using type = see below; };
The member type is present if and only if
  • V is a data-parallel type,
  • T is a vectorizable type, and
  • deduce-abi-t<T, V​::​size()> has a member type type.
If V is a specialization of basic_simd, let Abi1 denote an ABI tag such that basic_simd<T, Abi1>​::​​size() equals V​::​size().
If V is a specialization of basic_simd_mask, let Abi1 denote an ABI tag such that basic_simd_mask<sizeof(T), Abi1>​::​​size() equals V​::​size().
Where present, the member typedef type names basic_simd<T, Abi1> if V is a specialization of basic_simd or basic_simd_mask<sizeof(T), Abi1> if V is a specialization of basic_simd_mask.
template<simd-size-type N, class V> struct resize_simd { using type = see below; };
Let T denote
  • typename V​::​value_type if V is a specialization of basic_simd,
  • otherwise integer-from<mask-element-size<V>> if V is a specialization of basic_simd_mask.
The member type is present if and only if
  • V is a data-parallel type, and
  • deduce-abi-t<T, N> has a member type type.
If V is a specialization of basic_simd, let Abi1 denote an ABI tag such that basic_simd<T, Abi1>​::​​size() equals V​::​size().
If V is a specialization of basic_simd_mask, let Abi1 denote an ABI tag such that basic_simd_mask<sizeof(T), Abi1>​::​​size() equals V​::​size().
Where present, the member typedef type names basic_simd<T, Abi1> if V is a specialization of basic_simd or basic_simd_mask<sizeof(T), Abi1> if V is a specialization of basic_simd_mask.