diff --git a/hwy/base.h b/hwy/base.h index 98f9cb62e4..a3129600a7 100644 --- a/hwy/base.h +++ b/hwy/base.h @@ -882,78 +882,87 @@ HWY_INLINE constexpr bool IsIntegerLaneType() { return true; } +namespace detail { + template -HWY_API constexpr bool IsInteger() { - // NOTE: Do not add a IsInteger() specialization below as it is +static HWY_INLINE constexpr bool IsNonCvInteger() { + // NOTE: Do not add a IsNonCvInteger() specialization below as it is // possible for IsSame() to be true when compiled with MSVC // with the /Zc:wchar_t- option. - return IsIntegerLaneType() || IsSame, wchar_t>() || - IsSameEither, size_t, ptrdiff_t>() || - IsSameEither, intptr_t, uintptr_t>(); + return IsIntegerLaneType() || IsSame() || + IsSameEither() || + IsSameEither(); } template <> -HWY_INLINE constexpr bool IsInteger() { +HWY_INLINE constexpr bool IsNonCvInteger() { return true; } template <> -HWY_INLINE constexpr bool IsInteger() { +HWY_INLINE constexpr bool IsNonCvInteger() { return true; } template <> -HWY_INLINE constexpr bool IsInteger() { +HWY_INLINE constexpr bool IsNonCvInteger() { return true; } template <> -HWY_INLINE constexpr bool IsInteger() { +HWY_INLINE constexpr bool IsNonCvInteger() { return true; } template <> -HWY_INLINE constexpr bool IsInteger() { // NOLINT +HWY_INLINE constexpr bool IsNonCvInteger() { // NOLINT return true; } template <> -HWY_INLINE constexpr bool IsInteger() { // NOLINT +HWY_INLINE constexpr bool IsNonCvInteger() { // NOLINT return true; } template <> -HWY_INLINE constexpr bool IsInteger() { +HWY_INLINE constexpr bool IsNonCvInteger() { return true; } template <> -HWY_INLINE constexpr bool IsInteger() { +HWY_INLINE constexpr bool IsNonCvInteger() { return true; } template <> -HWY_INLINE constexpr bool IsInteger() { // NOLINT +HWY_INLINE constexpr bool IsNonCvInteger() { // NOLINT return true; } template <> -HWY_INLINE constexpr bool IsInteger() { // NOLINT +HWY_INLINE constexpr bool IsNonCvInteger() { // NOLINT return true; } template <> -HWY_INLINE constexpr bool IsInteger() { // NOLINT +HWY_INLINE constexpr bool IsNonCvInteger() { // NOLINT return true; } template <> -HWY_INLINE constexpr bool IsInteger() { // NOLINT +HWY_INLINE constexpr bool IsNonCvInteger() { // NOLINT return true; } #if defined(__cpp_char8_t) && __cpp_char8_t >= 201811L template <> -HWY_INLINE constexpr bool IsInteger() { +HWY_INLINE constexpr bool IsNonCvInteger() { return true; } #endif template <> -HWY_INLINE constexpr bool IsInteger() { +HWY_INLINE constexpr bool IsNonCvInteger() { return true; } template <> -HWY_INLINE constexpr bool IsInteger() { +HWY_INLINE constexpr bool IsNonCvInteger() { return true; } +} // namespace detail + +template +HWY_API constexpr bool IsInteger() { + return detail::IsNonCvInteger>(); +} + // ----------------------------------------------------------------------------- // BitCastScalar