|
native 0.0.1
Vectors, masks and wide register packs for C++26
|
Classes | |
| struct | native::wide< T, N > |
| Own N values of T, including an empty pack when N == 0. registers is the underlying array. Tuple access and structured bindings refer to the actual elements. Value initialization follows T's rules; no general floating-point or zero-initialization policy is added here. More... | |
Functions | |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a + b; } | |
| constexpr auto | native::operator+ (A const &a, B const &b) noexcept(noexcept(detail::wide_generic_detail::wide_dispatch(a, b, detail::wide_generic_detail::wide_add{}))) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a - b; } | |
| constexpr auto | native::operator- (A const &a, B const &b) noexcept(noexcept(detail::wide_generic_detail::wide_dispatch(a, b, detail::wide_generic_detail::wide_sub{}))) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a * b; } | |
| constexpr auto | native::operator* (A const &a, B const &b) noexcept(noexcept(detail::wide_generic_detail::wide_dispatch(a, b, detail::wide_generic_detail::wide_mul{}))) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a / b; } | |
| constexpr auto | native::operator/ (A const &a, B const &b) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a % b; } | |
| constexpr auto | native::operator% (A const &a, B const &b) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a & b; } | |
| constexpr auto | native::operator& (A const &a, B const &b) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a | b; } | |
| constexpr auto | native::operator| (A const &a, B const &b) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a ^ b; } | |
| constexpr auto | native::operator^ (A const &a, B const &b) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a << b; } | |
| constexpr auto | native::operator<< (A const &a, B const &b) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a >> b; } | |
| constexpr auto | native::operator>> (A const &a, B const &b) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a == b; } | |
| constexpr auto | native::operator== (A const &a, B const &b) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a != b; } | |
| constexpr auto | native::operator!= (A const &a, B const &b) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a < b; } | |
| constexpr auto | native::operator< (A const &a, B const &b) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a > b; } | |
| constexpr auto | native::operator> (A const &a, B const &b) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a <= b; } | |
| constexpr auto | native::operator<= (A const &a, B const &b) |
| template<class A, class B> requires detail::wide_generic_detail::wide_arguments<A, B> && (::native::detail::wide_target<A,B> == NATIVE_WIDE_INDEX) && requires(detail::wide_generic_detail::wide_element_t<A> const & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a >= b; } | |
| constexpr auto | native::operator>= (A const &a, B const &b) |
| template<class T, std::size_t N> requires (::native::detail::wide_target<T> == NATIVE_WIDE_INDEX) && requires(T const & a) { +a; } | |
| constexpr auto | native::operator+ (wide< T, N > const &a) |
| template<class T, std::size_t N> requires (::native::detail::wide_target<T> == NATIVE_WIDE_INDEX) && requires(T const & a) { -a; } | |
| constexpr auto | native::operator- (wide< T, N > const &a) |
| template<class T, std::size_t N> requires (::native::detail::wide_target<T> == NATIVE_WIDE_INDEX) && requires(T const & a) { ~a; } | |
| constexpr auto | native::operator~ (wide< T, N > const &a) |
| template<class T, std::size_t N> requires (::native::detail::wide_target<T> == NATIVE_WIDE_INDEX) && requires(T const & a) { !a; } | |
| constexpr auto | native::operator! (wide< T, N > const &a) |
| template<class T, std::size_t N, class B> requires (::native::detail::wide_target<T,B> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_arguments<wide<T, N>, B> && (detail::wide_generic_detail::wide_batch_assignable<wide<T,N>,B,detail::wide_generic_detail::wide_add> || ((detail::wide_generic_detail::wide_traits<B>::value || std::copy_constructible<B>) && requires(T & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a += b; })) | |
| constexpr wide< T, N > & | native::operator+= (wide< T, N > &a, B const &b) noexcept([] { if constexpr(detail::wide_generic_detail::wide_batch_assignable< wide< T, N >, B, detail::wide_generic_detail::wide_add >) return noexcept(std::declval< wide< T, N > & >()=detail::wide_generic_detail::wide_dispatch(std::declval< wide< T, N > const & >(), std::declval< B const & >(), detail::wide_generic_detail::wide_add{}));else return false;}()) |
| template<class T, std::size_t N, class B> requires (::native::detail::wide_target<T,B> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_arguments<wide<T, N>, B> && (detail::wide_generic_detail::wide_batch_assignable<wide<T,N>,B,detail::wide_generic_detail::wide_sub> || ((detail::wide_generic_detail::wide_traits<B>::value || std::copy_constructible<B>) && requires(T & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a -= b; })) | |
| constexpr wide< T, N > & | native::operator-= (wide< T, N > &a, B const &b) noexcept([] { if constexpr(detail::wide_generic_detail::wide_batch_assignable< wide< T, N >, B, detail::wide_generic_detail::wide_sub >) return noexcept(std::declval< wide< T, N > & >()=detail::wide_generic_detail::wide_dispatch(std::declval< wide< T, N > const & >(), std::declval< B const & >(), detail::wide_generic_detail::wide_sub{}));else return false;}()) |
| template<class T, std::size_t N, class B> requires (::native::detail::wide_target<T,B> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_arguments<wide<T, N>, B> && (detail::wide_generic_detail::wide_batch_assignable<wide<T,N>,B,detail::wide_generic_detail::wide_mul> || ((detail::wide_generic_detail::wide_traits<B>::value || std::copy_constructible<B>) && requires(T & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a *= b; })) | |
| constexpr wide< T, N > & | native::operator*= (wide< T, N > &a, B const &b) noexcept([] { if constexpr(detail::wide_generic_detail::wide_batch_assignable< wide< T, N >, B, detail::wide_generic_detail::wide_mul >) return noexcept(std::declval< wide< T, N > & >()=detail::wide_generic_detail::wide_dispatch(std::declval< wide< T, N > const & >(), std::declval< B const & >(), detail::wide_generic_detail::wide_mul{}));else return false;}()) |
| template<class T, std::size_t N, class B> requires (::native::detail::wide_target<T,B> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_arguments<wide<T, N>, B> && (detail::wide_generic_detail::wide_traits<B>::value || std::copy_constructible<B>) && requires(T & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a /= b; } | |
| constexpr wide< T, N > & | native::operator/= (wide< T, N > &a, B const &b) |
| template<class T, std::size_t N, class B> requires (::native::detail::wide_target<T,B> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_arguments<wide<T, N>, B> && (detail::wide_generic_detail::wide_traits<B>::value || std::copy_constructible<B>) && requires(T & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a %= b; } | |
| constexpr wide< T, N > & | native::operator%= (wide< T, N > &a, B const &b) |
| template<class T, std::size_t N, class B> requires (::native::detail::wide_target<T,B> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_arguments<wide<T, N>, B> && (detail::wide_generic_detail::wide_traits<B>::value || std::copy_constructible<B>) && requires(T & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a &= b; } | |
| constexpr wide< T, N > & | native::operator&= (wide< T, N > &a, B const &b) |
| template<class T, std::size_t N, class B> requires (::native::detail::wide_target<T,B> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_arguments<wide<T, N>, B> && (detail::wide_generic_detail::wide_traits<B>::value || std::copy_constructible<B>) && requires(T & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a |= b; } | |
| constexpr wide< T, N > & | native::operator|= (wide< T, N > &a, B const &b) |
| template<class T, std::size_t N, class B> requires (::native::detail::wide_target<T,B> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_arguments<wide<T, N>, B> && (detail::wide_generic_detail::wide_traits<B>::value || std::copy_constructible<B>) && requires(T & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a ^= b; } | |
| constexpr wide< T, N > & | native::operator^= (wide< T, N > &a, B const &b) |
| template<class T, std::size_t N, class B> requires (::native::detail::wide_target<T,B> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_arguments<wide<T, N>, B> && (detail::wide_generic_detail::wide_traits<B>::value || std::copy_constructible<B>) && requires(T & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a <<= b; } | |
| constexpr wide< T, N > & | native::operator<<= (wide< T, N > &a, B const &b) |
| template<class T, std::size_t N, class B> requires (::native::detail::wide_target<T,B> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_arguments<wide<T, N>, B> && (detail::wide_generic_detail::wide_traits<B>::value || std::copy_constructible<B>) && requires(T & a, detail::wide_generic_detail::wide_element_t<B> const & b) { a >>= b; } | |
| constexpr wide< T, N > & | native::operator>>= (wide< T, N > &a, B const &b) |
| template<class T, std::size_t N> requires (::native::detail::wide_target<T> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_value_operation<N, detail::wide_generic_detail::wide_isfinite,T> | |
| constexpr auto | native::isfinite (wide< T, N > const &input) noexcept(noexcept(detail::wide_generic_detail::wide_map< detail::wide_generic_detail::wide_isfinite >(input))) |
| template<class T, std::size_t N> requires (::native::detail::wide_target<T> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_value_operation<N, detail::wide_generic_detail::wide_isinf,T> | |
| constexpr auto | native::isinf (wide< T, N > const &input) noexcept(noexcept(detail::wide_generic_detail::wide_map< detail::wide_generic_detail::wide_isinf >(input))) |
| template<class T, std::size_t N> requires (::native::detail::wide_target<T> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_value_operation<N, detail::wide_generic_detail::wide_isnan,T> | |
| constexpr auto | native::isnan (wide< T, N > const &input) noexcept(noexcept(detail::wide_generic_detail::wide_map< detail::wide_generic_detail::wide_isnan >(input))) |
| template<class T, std::size_t N> requires (::native::detail::wide_target<T> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_value_operation<N, detail::wide_generic_detail::wide_signbit,T> | |
| constexpr auto | native::signbit (wide< T, N > const &input) noexcept(noexcept(detail::wide_generic_detail::wide_map< detail::wide_generic_detail::wide_signbit >(input))) |
| template<class T, std::size_t N> requires (::native::detail::wide_target<T> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_value_operation<N, detail::wide_generic_detail::wide_copysign,T,T> && std::same_as<detail::wide_generic_detail::wide_result <detail::wide_generic_detail::wide_copysign,T,T>,T> | |
| constexpr wide< T, N > | native::copysign (wide< T, N > const &a, wide< T, N > const &b) noexcept(noexcept(detail::wide_generic_detail::wide_map< detail::wide_generic_detail::wide_copysign >(a, b))) |
| template<class T, std::size_t N> requires (::native::detail::wide_target<T> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_value_operation<N, detail::wide_generic_detail::wide_floor,T> && std::same_as<detail::wide_generic_detail::wide_result <detail::wide_generic_detail::wide_floor,T>,T> | |
| constexpr wide< T, N > | native::floor (wide< T, N > const &input) noexcept(noexcept(detail::wide_generic_detail::wide_map< detail::wide_generic_detail::wide_floor >(input))) |
| template<class T, std::size_t N> requires (::native::detail::wide_target<T> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_value_operation<N, detail::wide_generic_detail::wide_ceil,T> && std::same_as<detail::wide_generic_detail::wide_result <detail::wide_generic_detail::wide_ceil,T>,T> | |
| constexpr wide< T, N > | native::ceil (wide< T, N > const &input) noexcept(noexcept(detail::wide_generic_detail::wide_map< detail::wide_generic_detail::wide_ceil >(input))) |
| template<class T, std::size_t N> requires (::native::detail::wide_target<T> == NATIVE_WIDE_INDEX) && detail::wide_generic_detail::wide_value_operation<N, detail::wide_generic_detail::wide_trunc,T> && std::same_as<detail::wide_generic_detail::wide_result <detail::wide_generic_detail::wide_trunc,T>,T> | |
| constexpr wide< T, N > | native::trunc (wide< T, N > const &input) noexcept(noexcept(detail::wide_generic_detail::wide_map< detail::wide_generic_detail::wide_trunc >(input))) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) | |
| constexpr wide< R, N > | native::broadcast (R value) noexcept(noexcept(wide< R, N >::broadcast(value))) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_abs(x); } | |
| constexpr wide< R, N > | native::abs (wide< R, N > const &input) noexcept([] { if constexpr(requires(std::array< R, N > const &a) { detail::wide_generic_detail::adl_abs(a);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_abs(std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_abs(std::declval< R const & >())));}()) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_sqrt(x); } | |
| constexpr wide< R, N > | native::sqrt (wide< R, N > const &input) noexcept([] { if constexpr(requires(std::array< R, N > const &a) { detail::wide_generic_detail::adl_sqrt(a);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_sqrt(std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_sqrt(std::declval< R const & >())));}()) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_sin(x); } | |
| constexpr wide< R, N > | native::sin (wide< R, N > const &input) noexcept([] { if constexpr(requires(std::array< R, N > const &a) { detail::wide_generic_detail::adl_sin(a);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_sin(std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_sin(std::declval< R const & >())));}()) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_cos(x); } | |
| constexpr wide< R, N > | native::cos (wide< R, N > const &input) noexcept([] { if constexpr(requires(std::array< R, N > const &a) { detail::wide_generic_detail::adl_cos(a);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_cos(std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_cos(std::declval< R const & >())));}()) |
| template<bool Flush = false, unsigned Degree = 6, class R, std::size_t N> requires (Degree >= 1 && Degree <= 7) && (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_exp<Flush,Degree>(x); } | |
| constexpr wide< R, N > | native::exp (wide< R, N > const &input) noexcept([] { if constexpr(requires(std::array< R, N > const &a) { detail::wide_generic_detail::adl_exp< Flush, Degree >(a);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_exp< Flush, Degree >(std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_exp< Flush, Degree >(std::declval< R const & >())));}()) |
| template<bool Flush = false, class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_exp2 <Flush>(x); } | |
| constexpr wide< R, N > | native::exp2 (wide< R, N > const &input) noexcept([] { if constexpr(requires(std::array< R, N > const &a) { detail::wide_generic_detail::adl_exp2< Flush >(a);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_exp2< Flush >(std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_exp2< Flush >(std::declval< R const & >())));}()) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_expm1(x); } | |
| constexpr wide< R, N > | native::expm1 (wide< R, N > const &input) noexcept([] { if constexpr(requires(std::array< R, N > const &a) { detail::wide_generic_detail::adl_expm1(a);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_expm1(std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_expm1(std::declval< R const & >())));}()) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_damping_gain(x); } | |
| constexpr wide< R, N > | native::damping_gain (wide< R, N > const &input) noexcept([] { if constexpr(requires(std::array< R, N > const &a) { detail::wide_generic_detail::adl_damping_gain(a);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_damping_gain(std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_damping_gain(std::declval< R const & >())));}()) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_log(x); } | |
| constexpr wide< R, N > | native::log (wide< R, N > const &input) noexcept([] { if constexpr(requires(std::array< R, N > const &a) { detail::wide_generic_detail::adl_log(a);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_log(std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_log(std::declval< R const & >())));}()) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_log2(x); } | |
| constexpr wide< R, N > | native::log2 (wide< R, N > const &input) noexcept([] { if constexpr(requires(std::array< R, N > const &a) { detail::wide_generic_detail::adl_log2(a);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_log2(std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_log2(std::declval< R const & >())));}()) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_log1p(x); } | |
| constexpr wide< R, N > | native::log1p (wide< R, N > const &input) noexcept([] { if constexpr(requires(std::array< R, N > const &a) { detail::wide_generic_detail::adl_log1p(a);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_log1p(std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_log1p(std::declval< R const & >())));}()) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_tanh(x); } | |
| constexpr wide< R, N > | native::tanh (wide< R, N > const &input) noexcept([] { if constexpr(requires(std::array< R, N > const &a) { detail::wide_generic_detail::adl_tanh(a);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_tanh(std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_tanh(std::declval< R const & >())));}()) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_atan2(x,x); } | |
| constexpr wide< R, N > | native::atan2 (wide< R, N > const &y, wide< R, N > const &x) noexcept([] { if constexpr(requires(std::array< R, N > const &a) { detail::wide_generic_detail::adl_atan2(a, a);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_atan2(std::declval< std::array< R, N > const & >(), std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_atan2(std::declval< R const & >(), std::declval< R const & >())));}()) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_fma(x, x,x); } | |
| constexpr wide< R, N > | native::fma (wide< R, N > const &a, wide< R, N > const &b, wide< R, N > const &c) noexcept([] { if constexpr(requires(std::array< R, N > const &x) { detail::wide_generic_detail::adl_fma(x, x, x);}) return noexcept(wide< R, N >{detail::wide_generic_detail::adl_fma(std::declval< std::array< R, N > const & >(), std::declval< std::array< R, N > const & >(), std::declval< std::array< R, N > const & >())});else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_fma(std::declval< R const & >(), std::declval< R const & >(), std::declval< R const & >())));}()) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) && requires(R const & x) { detail::wide_generic_detail::adl_sincos(x); } | |
| constexpr auto | native::sincos (wide< R, N > const &input) noexcept([] { if constexpr(requires(std::array< R, N > const &x) { detail::wide_generic_detail::adl_sincos(x);}) return noexcept(detail::wide_generic_detail::adl_sincos(std::declval< std::array< R, N > const & >())) &&std::is_nothrow_move_constructible_v< std::array< R, N > >;else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&(N==0||(noexcept(detail::wide_generic_detail::adl_sincos(std::declval< R const & >())) &&noexcept(std::declval< R & >()=std::declval< decltype(detail::wide_generic_detail::adl_sincos(std::declval< R const & >())) & >().first) &&noexcept(std::declval< R & >()=std::declval< decltype(detail::wide_generic_detail::adl_sincos(std::declval< R const & >())) & >().second)));}()) |
| template<class R, std::size_t N> requires (::native::detail::wide_target<R> == NATIVE_WIDE_INDEX) | |
| constexpr wide< R, N > | native::select (wide< decltype(R{}==R{}), N > const &masks, wide< R, N > const &a, wide< R, N > const &b) noexcept([] { if constexpr(N==0) return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > >;else if constexpr(std::is_same_v< decltype(R{}==R{}), bool >) return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&noexcept(std::declval< R & >()=std::declval< R const & >());else return noexcept(wide< R, N >()) &&std::is_nothrow_move_constructible_v< wide< R, N > > &&noexcept(std::declval< R & >()=detail::wide_generic_detail::adl_select(std::declval< decltype(R{}==R{}) const & >(), std::declval< R const & >(), std::declval< R const & >()));}()) |
A fixed number of independent elements, usually native registers. Operations preserve the element library's contracts. Batch-aware math calls one ADL array kernel when available; otherwise it applies the element operation. This does not repartition a pack or choose a different architecture. The reference shows one representative target-family overload per signature; internal family constraints select the matching implementation for scalar, AVX2, AVX-512 or NEON elements.
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |
|
inlineconstexpr |
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |
|
inlineconstexpr |
|
inlineconstexprnoexcept |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |
|
inlineconstexprnoexcept |