template<class T, class Abi>
constexpr basic_simd<T, Abi> min(const basic_simd<T, Abi>& a,
const basic_simd<T, Abi>& b) noexcept;
template<class T, class Abi>
constexpr basic_simd<T, Abi> max(const basic_simd<T, Abi>& a,
const basic_simd<T, Abi>& b) noexcept;
template<class T, class Abi>
constexpr pair<basic_simd<T, Abi>, basic_simd<T, Abi>>
minmax(const basic_simd<T, Abi>& a, const basic_simd<T, Abi>& b) noexcept;
template<class T, class Abi>
constexpr basic_simd<T, Abi> clamp(
const basic_simd<T, Abi>& v, const basic_simd<T, Abi>& lo, const basic_simd<T, Abi>& hi);
template<class T, class U>
constexpr auto simd_select(bool c, const T& a, const U& b)
-> remove_cvref_t<decltype(c ? a : b)>;
template<size_t Bytes, class Abi, class T, class U>
constexpr auto simd_select(const basic_simd_mask<Bytes, Abi>& c, const T& a, const U& b)
noexcept -> decltype(simd-select-impl(c, a, b));