friend constexpr basic_vec operator+(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec operator-(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec operator*(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec operator/(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec operator%(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec operator&(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec operator|(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec operator^(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec operator<(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec operator>(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec operator<(const basic_vec& v, simd-size-type n) noexcept;
friend constexpr basic_vec operator>(const basic_vec& v, simd-size-type n) noexcept;
friend constexpr basic_vec& operator+=(basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec& operator-=(basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec& operator*=(basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec& operator/=(basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec& operator%=(basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec& operator&=(basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec& operator|=(basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec& operator^=(basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec& operator<=(basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec& operator>=(basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec& operator<=(basic_vec& lhs, simd-size-type n) noexcept;
friend constexpr basic_vec& operator>=(basic_vec& lhs, simd-size-type n) noexcept;
friend constexpr mask_type operator=(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr mask_type operator!=(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr mask_type operator>=(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr mask_type operator<=(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr mask_type operator>(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr mask_type operator<(const basic_vec& lhs, const basic_vec& rhs) noexcept;
friend constexpr basic_vec
simd-select-impl(const mask_type& mask, const basic_vec& a, const basic_vec& b) noexcept;
template<class T, class Abi, class BinaryOperation = plus<>
constexpr T reduce(const basic_vec<T, Abi>& x, BinaryOperation binary_op = {});
template<class T, class Abi, class BinaryOperation = plus<>
constexpr T reduce(
const basic_vec<T, Abi>& x, const typename basic_vec<T, Abi>::mask_type& mask,
BinaryOperation binary_op = {}, type_identity_t<T> identity_element = see below);
template<class T, class Abi> constexpr T reduce_min(const basic_vec<T, Abi>& x) noexcept;
template<class T, class Abi>
constexpr T reduce_min(
const basic_vec<T, Abi>&, const typename basic_vec<T, Abi>::mask_type&) noexcept;
template<class T, class Abi> constexpr T reduce_max(const basic_vec<T, Abi>& x) noexcept;
template<class T, class Abi>
constexpr T reduce_max(
const basic_vec<T, Abi>&, const typename basic_vec<T, Abi>::mask_type&) noexcept;
template<class V = see below, ranges::contiguous_range R, class. Flags>
requires ranges::sized_range<R>
constexpr V unchecked_load(R&& r, flags<Flags..> f = {});
template<class V = see below, ranges::contiguous_range R, class. Flags>
requires ranges::sized_range<R>
constexpr V unchecked_load(R&& r, const typename V::mask_type& mask, flags<Flags..> f = {});
template<class V = see below, contiguous_iterator I, class. Flags>
constexpr V unchecked_load(I first, iter_difference_t<I> n, flags<Flags..> f = {});
template<class V = see below, contiguous_iterator I, class. Flags>
constexpr V unchecked_load(I first, iter_difference_t<I> n, const typename V::mask_type& mask,
flags<Flags..> f = {});
template<class V = see below, contiguous_iterator I, sized_sentinel_for<I> S, class. Flags>
constexpr V unchecked_load(I first, S last, flags<Flags..> f = {});
template<class V = see below, contiguous_iterator I, sized_sentinel_for<I> S, class. Flags>
constexpr V unchecked_load(I first, S last, const typename V::mask_type& mask,
flags<Flags..> f = {});
template<class V = see below, ranges::contiguous_range R, class. Flags>
requires ranges::sized_range<R>
constexpr V partial_load(R&& r, flags<Flags..> f = {});
template<class V = see below, ranges::contiguous_range R, class. Flags>
requires ranges::sized_range<R>
constexpr V partial_load(R&& r, const typename V::mask_type& mask, flags<Flags..> f = {});
template<class V = see below, contiguous_iterator I, class. Flags>
constexpr V partial_load(I first, iter_difference_t<I> n, flags<Flags..> f = {});
template<class V = see below, contiguous_iterator I, class. Flags>
constexpr V partial_load(I first, iter_difference_t<I> n, const typename V::mask_type& mask,
flags<Flags..> f = {});
template<class V = see below, contiguous_iterator I, sized_sentinel_for<I> S, class. Flags>
constexpr V partial_load(I first, S last, flags<Flags..> f = {});
template<class V = see below, contiguous_iterator I, sized_sentinel_for<I> S, class. Flags>
constexpr V partial_load(I first, S last, const typename V::mask_type& mask,
flags<Flags..> f = {});
template<class T, class Abi, ranges::contiguous_range R, class. Flags>
requires ranges::sized_range<R>
constexpr void unchecked_store(const basic_vec<T, Abi>& v, R&& r, flags<Flags..> f = {});
template<class T, class Abi, ranges::contiguous_range R, class. Flags>
requires ranges::sized_range<R>
constexpr void unchecked_store(const basic_vec<T, Abi>& v, R&& r,
const typename basic_vec<T, Abi>::mask_type& mask,
flags<Flags..> f = {});
template<class T, class Abi, contiguous_iterator I, class. Flags>
constexpr void unchecked_store(const basic_vec<T, Abi>& v, I first, iter_difference_t<I> n,
flags<Flags..> f = {});
template<class T, class Abi, contiguous_iterator I, class. Flags>
constexpr void unchecked_store(const basic_vec<T, Abi>& v, I first, iter_difference_t<I> n,
const typename basic_vec<T, Abi>::mask_type& mask,
flags<Flags..> f = {});
template<class T, class Abi, contiguous_iterator I, sized_sentinel_for<I> S, class. Flags>
constexpr void unchecked_store(const basic_vec<T, Abi>& v, I first, S last,
flags<Flags..> f = {});
template<class T, class Abi, contiguous_iterator I, sized_sentinel_for<I> S, class. Flags>
constexpr void unchecked_store(const basic_vec<T, Abi>& v, I first, S last,
const typename basic_vec<T, Abi>::mask_type& mask,
flags<Flags..> f = {});
template<class T, class Abi, ranges::contiguous_range R, class. Flags>
requires ranges::sized_range<R>
constexpr void partial_store(const basic_vec<T, Abi>& v, R&& r, flags<Flags..> f = {});
template<class T, class Abi, ranges::contiguous_range R, class. Flags>
requires ranges::sized_range<R>
constexpr void partial_store(const basic_vec<T, Abi>& v, R&& r,
const typename basic_vec<T, Abi>::mask_type& mask,
flags<Flags..> f = {});
template<class T, class Abi, contiguous_iterator I, class. Flags>
constexpr void partial_store(const basic_vec<T, Abi>& v, I first, iter_difference_t<I> n,
flags<Flags..> f = {});
template<class T, class Abi, contiguous_iterator I, class. Flags>
constexpr void partial_store(const basic_vec<T, Abi>& v, I first, iter_difference_t<I> n,
const typename basic_vec<T, Abi>::mask_type& mask,
flags<Flags..> f = {});
template<class T, class Abi, contiguous_iterator I, sized_sentinel_for<I> S, class. Flags>
constexpr void partial_store(const basic_vec<T, Abi>& v, I first, S last,
flags<Flags..> f = {});
template<class T, class Abi, contiguous_iterator I, sized_sentinel_for<I> S, class. Flags>
constexpr void partial_store(const basic_vec<T, Abi>& v, I first, S last,
const typename basic_vec<T, Abi>::mask_type& mask,
flags<Flags..> f = {});
template<simd-size-type N = see below, simd-vec-type V, class IdxMap>
constexpr resize_t<N, V> permute(const V& v, IdxMap&& idxmap);
template<simd-size-type N = see below, simd-mask-type M, class IdxMap>
constexpr resize_t<N, M> permute(const M& v, IdxMap&& idxmap);
template<simd-vec-type V, simd-integral I>
constexpr resize_t<I::size(), V> permute(const V& v, const I& indices);
template<simd-mask-type M, simd-integral I>
constexpr resize_t<I::size(), M> permute(const M& v, const I& indices);
template<simd-vec-type V>
constexpr V compress(const V& v, const typename V::mask_type& selector);
template<simd-mask-type M>
constexpr M compress(const M& v, const type_identity_t<M>& selector);
template<simd-vec-type V>
constexpr V compress(const V& v, const typename V::mask_type& selector,
const typename V::value_type& fill_value);
template<simd-mask-type M>
constexpr M compress(const M& v, const type_identity_t<M>& selector,
const typename M::value_type& fill_value);
template<simd-vec-type V>
constexpr V expand(const V& v, const typename V::mask_type& selector, const V& original = {});
template<simd-mask-type M>
constexpr M expand(const M& v, const type_identity_t<M>& selector, const M& original = {});