diff --git a/src/core/include/mp-units/bits/external/type_name.h b/src/core/include/mp-units/bits/external/type_name.h index 9a74759f..e8fb007f 100644 --- a/src/core/include/mp-units/bits/external/type_name.h +++ b/src/core/include/mp-units/bits/external/type_name.h @@ -25,3 +25,16 @@ template name.remove_suffix(suffix.size()); return name; } + +template +[[nodiscard]] consteval auto better_type_name(T1 v1, T2 v2) +{ + if constexpr (type_name().size() < type_name().size()) + return v1; + else if constexpr (type_name().size() < type_name().size()) + return v2; + else if constexpr (type_name() < type_name()) + return v1; + else + return v2; +} diff --git a/src/core/include/mp-units/unit.h b/src/core/include/mp-units/unit.h index 63ddbef8..0052f12b 100644 --- a/src/core/include/mp-units/unit.h +++ b/src/core/include/mp-units/unit.h @@ -629,8 +629,11 @@ template if constexpr (U1{} == U2{}) { if constexpr (std::derived_from) return u1; - else + else if constexpr (std::derived_from) return u2; + else + // TODO Check if there is a better choice here + return better_type_name(u1, u2); } else { constexpr auto canonical_lhs = detail::get_canonical_unit(U1{}); constexpr auto canonical_rhs = detail::get_canonical_unit(U2{});