std::experimental::split

From cppreference.com
< cpplrm; | experimentallrm; | simd
Technical specifications
Filesystem library (filesystem TS)
Library fundamentals (library fundamentals TS)
Library fundamentals 2 (library fundamentals 2 TS)
Extensions for parallelism (parallelism TS)
Extensions for parallelism 2 (parallelism TS v2)
Extensions for concurrency (concurrency TS)
Concepts (concepts TS)
Ranges (ranges TS)
Special mathematical functions (special math TR)
Defined in header <experimental/simd>
template < std::size_t... Sizes, class T, class Abi >

std::tuple<simd<T, abi_for_size_t<T, Sizes>>...>

split( const simd<T, Abi>& v );
(1)
template < std::size_t... Sizes, class T, class Abi >

std::tuple<simd_mask<T, abi_for_size_t<T, Sizes>>...>

split( const simd_mask<T, Abi>& v );
(2)
template < class V, class Abi >

std::array<V, simd_size_v<typename V::value_type, Abi> / V::size()>

split( const simd<typename V::value_type, Abi>& v );
(3)
template < class V, class Abi >

std::array<V, simd_size_v<typename V::value_type, Abi> / V::size()>

split( const simd_mask<typename V::value_type, Abi>& v );
(4)

Splits the input simd or simd_mask object into multiple simd or simd_mask objects.

1-2) split the input object into potentially different types (e.g. types with different sizes) of objects. These functions do not participate in overloading resolution unless Sizes... sum up to v.size().
3-4) split the input object into a array of objects. These functions do not participate in overloading resolution unless
  • The array element must be of type simd or simd_mask, for the type of v as simd or simd_mask, respectively.
  • simd_size_v<typename V::value_type, Abi> is an integral multiple of V::size().

Parameters

v - the input simd or simd_mask object

Return value

1-2) a tuple that contains the splitted simd or simd_mask objects.
3-4) an array that contains the splitted simd or simd_mask objects.

Example