diff --git a/src/core/include/units/bits/algorithm.h b/src/core/include/units/bits/algorithm.h index 762bb7bc..1ac80362 100644 --- a/src/core/include/units/bits/algorithm.h +++ b/src/core/include/units/bits/algorithm.h @@ -80,8 +80,11 @@ constexpr auto lexicographical_compare_three_way(I1 f1, I1 l1, I2 f2, I2 l2, Cmp bool exhaust1 = (f1 == l1); bool exhaust2 = (f2 == l2); + UNITS_DIAGNOSTIC_PUSH + UNITS_DIAGNOSTIC_IGNORE_ZERO_AS_NULLPOINTER_CONSTANT for (; !exhaust1 && !exhaust2; exhaust1 = (++f1 == l1), exhaust2 = (++f2 == l2)) if (auto c = comp(*f1, *f2); c != 0) return c; + UNITS_DIAGNOSTIC_POP return !exhaust1 ? std::strong_ordering::greater : !exhaust2 ? std::strong_ordering::less diff --git a/src/core/include/units/bits/external/hacks.h b/src/core/include/units/bits/external/hacks.h index 8d142727..67c1086c 100644 --- a/src/core/include/units/bits/external/hacks.h +++ b/src/core/include/units/bits/external/hacks.h @@ -51,6 +51,7 @@ #define UNITS_DIAGNOSTIC_IGNORE_NON_TEMPLATE_FRIEND UNITS_DIAGNOSTIC_IGNORE("-Wnon-template-friend") #define UNITS_DIAGNOSTIC_IGNORE_SHADOW UNITS_DIAGNOSTIC_IGNORE("-Wshadow") #define UNITS_DIAGNOSTIC_IGNORE_UNREACHABLE +#define UNITS_DIAGNOSTIC_IGNORE_ZERO_AS_NULLPOINTER_CONSTANT UNITS_DIAGNOSTIC_IGNORE("-Wzero-as-nullpointer-constant") #else #define UNITS_DIAGNOSTIC_PUSH UNITS_PRAGMA(warning(push)) #define UNITS_DIAGNOSTIC_POP UNITS_PRAGMA(warning(pop)) @@ -63,6 +64,7 @@ #define UNITS_DIAGNOSTIC_IGNORE_NON_TEMPLATE_FRIEND #define UNITS_DIAGNOSTIC_IGNORE_SHADOW UNITS_DIAGNOSTIC_IGNORE(4459) #define UNITS_DIAGNOSTIC_IGNORE_UNREACHABLE UNITS_DIAGNOSTIC_IGNORE(4702) +#define UNITS_DIAGNOSTIC_IGNORE_ZERO_AS_NULLPOINTER_CONSTANT #endif #if _LIBCPP_VERSION diff --git a/src/core/include/units/symbol_text.h b/src/core/include/units/symbol_text.h index adf138e5..6eb71e6d 100644 --- a/src/core/include/units/symbol_text.h +++ b/src/core/include/units/symbol_text.h @@ -24,6 +24,7 @@ // IWYU pragma: begin_exports #include +#include #include #include #include @@ -146,7 +147,10 @@ struct basic_symbol_text { [[nodiscard]] friend constexpr auto operator<=>(const basic_symbol_text& lhs, const basic_symbol_text& rhs) noexcept { + UNITS_DIAGNOSTIC_PUSH + UNITS_DIAGNOSTIC_IGNORE_ZERO_AS_NULLPOINTER_CONSTANT if (const auto cmp = lhs.standard() <=> rhs.standard(); cmp != 0) return cmp; + UNITS_DIAGNOSTIC_POP return lhs.ascii() <=> rhs.ascii(); }