The header defines class templates, tag types, trait types, and function templates for element-wise operations on data-parallel objects.
namespacestd::experimental{inlinenamespaceparallelism_v2{namespacesimd_abi{usingscalar=/* see below */;template<intN>usingfixed_size=/* see below */;template<classT>constexprintmax_fixed_size=/* implementation-defined */;template<classT>usingcompatible=/* implementation-defined */;template<classT>usingnative=/* implementation-defined */;template<classT,size_tN,class...Abis>structdeduce{usingtype=/* see below */;};template<classT,size_tN,class...Abis>usingdeduce_t=typenamededuce<T,N,Abis...>::type;}// namespace simd_abistructelement_aligned_tag{};structvector_aligned_tag{};template<size_t>structoveraligned_tag{};inlineconstexprelement_aligned_tagelement_aligned{};inlineconstexprvector_aligned_tagvector_aligned{};template<size_tN>constexproveraligned_tag<N>overaligned{};// 9.4, simd type traitstemplate<classT>structis_abi_tag;template<classT>constexprboolis_abi_tag_v=is_abi_tag<T>::value;template<classT>structis_simd;template<classT>constexprboolis_simd_v=is_simd<T>::value;template<classT>structis_simd_mask;template<classT>constexprboolis_simd_mask_v=is_simd_mask<T>::value;template<classT>structis_simd_flag_type;template<classT>constexprboolis_simd_flag_type_v=is_simd_flag_type<T>::value;template<classT,classAbi=simd_abi::compatible<T>>structsimd_size;template<classT,classAbi=simd_abi::compatible<T>>constexprsize_tsimd_size_v=simd_size<T,Abi>::value;template<classT,classU=typenameT::value_type>structmemory_alignment;template<classT,classU=typenameT::value_type>constexprsize_tmemory_alignment_v=memory_alignment<T,U>::value;template<classT,classV>structrebind_simd{usingtype=/* see below */;};template<classT,classV>usingrebind_simd_t=typenamerebind_simd<T,V>::type;template<intN,classV>structresize_simd{usingtype=/* see below */;};template<intN,classV>usingresize_simd_t=typenameresize_simd<N,V>::type;// 9.6, Class template simdtemplate<classT,classAbi=simd_abi::compatible<T>>classsimd;template<classT>usingnative_simd=simd<T,simd_abi::native<T>>;template<classT,intN>usingfixed_size_simd=simd<T,simd_abi::fixed_size<N>>;// 9.8, Class template simd_masktemplate<classT,classAbi=simd_abi::compatible<T>>classsimd_mask;template<classT>usingnative_simd_mask=simd_mask<T,simd_abi::native<T>>;template<classT,intN>usingfixed_size_simd_mask=simd_mask<T,simd_abi::fixed_size<N>>;// 9.7.5, Caststemplate<classT,classU,classAbi>/* see below */simd_cast(constsimd<U,Abi>&)noexcept;template<classT,classU,classAbi>/* see below */static_simd_cast(constsimd<U,Abi>&)noexcept;template<classT,classAbi>fixed_size_simd<T,simd_size_v<T,Abi>>to_fixed_size(constsimd<T,Abi>&)noexcept;template<classT,classAbi>fixed_size_simd_mask<T,simd_size_v<T,Abi>>to_fixed_size(constsimd_mask<T,Abi>&)noexcept;template<classT,intN>native_simd<T>to_native(constfixed_size_simd<T,N>&)noexcept;template<classT,intN>native_simd_mask<T>to_native(constfixed_size_simd_mask<T,N>&)noexcept;template<classT,intN>simd<T>to_compatible(constfixed_size_simd<T,N>&)noexcept;template<classT,intN>simd_mask<T>to_compatible(constfixed_size_simd_mask<T,N>&)noexcept;template<size_t...Sizes,classT,classAbi>tuple<simd<T,simd_abi::deduce_t<T,Sizes>>...>split(constsimd<T,Abi>&)noexcept;template<size_t...Sizes,classT,classAbi>tuple<simd_mask<T,simd_mask_abi::deduce_t<T,Sizes>>...>split(constsimd_mask<T,Abi>&)noexcept;template<classV,classAbi>array<V,simd_size_v<typenameV::value_type,Abi>/V::size()>split(constsimd<typenameV::value_type,Abi>&)noexcept;template<classV,classAbi>array<V,simd_size_v<typenameV::simd_type::value_type,Abi>/V::size()>split(constsimd_mask<typenameV::simd_type::value_type,Abi>&)noexcept;template<size_tN,classT,classA>array<resize_simd<simd_size_v<T,A>/N,simd<T,A>>,N>split_by(constsimd<T,A>&x)noexcept;template<size_tN,classT,classA>array<resize_simd<simd_size_v<T,A>/N,simd_mask<T,A>>,N>split_by(constsimd_mask<T,A>&x)noexcept;template<classT,class...Abis>simd<T,simd_abi::deduce_t<T,(simd_size_v<T,Abis>+...)>>concat(constsimd<T,Abis>&...)noexcept;template<classT,class...Abis>simd_mask<T,simd_abi::deduce_t<T,(simd_size_v<T,Abis>+...)>>concat(constsimd_mask<T,Abis>&...)noexcept;template<classT,classAbi,size_tN>resize_simd<simd_size_v<T,Abi>*N,simd<T,Abi>>concat(constarray<simd<T,Abi>,N>&arr)noexcept;template<classT,classAbi,size_tN>resize_simd<simd_size_v<T,Abi>*N,simd_mask<T,Abi>>concat(constarray<simd_mask<T,Abi>,N>&arr)noexcept;// 9.9.4, Reductionstemplate<classT,classAbi>boolall_of(constsimd_mask<T,Abi>&)noexcept;template<classT,classAbi>boolany_of(constsimd_mask<T,Abi>&)noexcept;template<classT,classAbi>boolnone_of(constsimd_mask<T,Abi>&)noexcept;template<classT,classAbi>boolsome_of(constsimd_mask<T,Abi>&)noexcept;template<classT,classAbi>intpopcount(constsimd_mask<T,Abi>&)noexcept;template<classT,classAbi>intfind_first_set(constsimd_mask<T,Abi>&);template<classT,classAbi>intfind_last_set(constsimd_mask<T,Abi>&);boolall_of(T)noexcept;boolany_of(T)noexcept;boolnone_of(T)noexcept;boolsome_of(T)noexcept;intpopcount(T)noexcept;intfind_first_set(T);intfind_last_set(T);// 9.5, Where expression class templatestemplate<classM,classT>classconst_where_expression;template<classM,classT>classwhere_expression;// 9.9.5, Where functionstemplate<classT,classAbi>where_expression<simd_mask<T,Abi>,simd<T,Abi>>where(consttypenamesimd<T,Abi>::mask_type&,simd<T,Abi>&)noexcept;template<classT,classAbi>const_where_expression<simd_mask<T,Abi>,simd<T,Abi>>where(consttypenamesimd<T,Abi>::mask_type&,constsimd<T,Abi>&)noexcept;template<classT,classAbi>where_expression<simd_mask<T,Abi>,simd_mask<T,Abi>>where(consttype_identity_t<simd_mask<T,Abit>>&,simd_mask<T,Abi>&)noexcept;template<classT,classAbi>const_where_expression<simd_mask<T,Abi>,simd_mask<T,Abi>>where(consttype_identity_t<simd_mask<T,Abit>>&,constsimd_mask<T,Abi>&)noexcept;template<classT>where_expression<bool,T>where(/* see below */k,T&d)noexcept;template<classT>const_where_expression<bool,T>where(/* see below */k,constT&d)noexcept;// 9.7.4, Reductionstemplate<classT,classAbi,classBinaryOperation=plus<>>Treduce(constsimd<T,Abi>&,BinaryOperation={});template<classM,classV,classBinaryOperation>typenameV::value_typereduce(constconst_where_expression<M,V>&x,typenameV::value_typeidentity_element,BinaryOperationbinary_op);template<classM,classV>typenameV::value_typereduce(constconst_where_expression<M,V>&x,plus<>binary_op={})noexcept;template<classM,classV>typenameV::value_typereduce(constconst_where_expression<M,V>&x,multiplies<>binary_op)noexcept;template<classM,classV>typenameV::value_typereduce(constconst_where_expression<M,V>&x,bit_and<>binary_op)noexcept;template<classM,classV>typenameV::value_typereduce(constconst_where_expression<M,V>&x,bit_or<>binary_op)noexcept;template<classM,classV>typenameV::value_typereduce(constconst_where_expression<M,V>&x,bit_xor<>binary_op)noexcept;template<classT,classAbi>Thmin(constsimd<T,abi>&)noexcept;template<classM,classV>typenameV::value_typehmin(constconst_where_expression<M,V>&)noexcept;template<classT,classAbi>Thmax(constsimd<T,abi>&)noexcept;template<classM,classV>typenameV::value_typehmax(constconst_where_expression<M,V>&)noexcept;// 9.7.6, Algorithmstemplate<classT,classAbi>simd<T,Abi>min(constsimd<T,Abi>&a,constsimd<T,Abi>&b)noexcept;template<classT,classAbi>simd<T,Abi>max(constsimd<T,Abi>&a,constsimd<T,Abi>&b)noexcept;template<classT,classAbi>pair<simd<T,Abi>,simd<T,Abi>>minmax(constsimd<T,Abi>&a,constsimd<T,Abi>&b)noexcept;template<classT,classAbi>simd<T,Abi>clamp(constsimd<T,Abi>&v,constsimd<T,Abi>&lo,constsimd<T,Abi>&hi);}// namespace parallelism_v2}// namespace std::experimental