From c3c80fde11305b0da919018fb78bcd5893cbd272 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Wed, 11 Dec 2019 11:27:51 +0100 Subject: [PATCH] Spaceship support added (resolves #19) --- src/include/units/quantity.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/include/units/quantity.h b/src/include/units/quantity.h index 5381907f..90b57881 100644 --- a/src/include/units/quantity.h +++ b/src/include/units/quantity.h @@ -25,6 +25,9 @@ #include #include #include +#if __GNUC__ >= 10 +#include +#endif #include #include @@ -479,6 +482,31 @@ public: return ret(ret(lhs).count() % ret(rhs).count()); } +#if __GNUC__ >= 10 + + template + [[nodiscard]] friend constexpr auto operator<=>(const quantity& lhs, const quantity& rhs) + requires equivalent_dim && + detail::basic_arithmetic && + std::totally_ordered_with + { + using cq = common_quantity>; + return cq(lhs).count() <=> cq(rhs).count(); + } + + // TODO op== not needed (gcc bug) + template + [[nodiscard]] friend constexpr auto operator==(const quantity& lhs, const quantity& rhs) + requires equivalent_dim && + detail::basic_arithmetic && + std::equality_comparable_with + { + using cq = common_quantity>; + return cq(lhs).count() == cq(rhs).count(); + } + +#else + template [[nodiscard]] friend constexpr bool operator==(const quantity& lhs, const quantity& rhs) requires equivalent_dim && @@ -535,6 +563,8 @@ public: return !(lhs < rhs); } +#endif + template friend std::basic_ostream& operator<<(std::basic_ostream& os, const quantity& q) {