fix: commutativity of a common_unit() fixed

This commit is contained in:
Mateusz Pusz
2023-06-05 11:09:02 +02:00
parent 6627b0a491
commit c2e91d41c4
2 changed files with 17 additions and 1 deletions

View File

@ -25,3 +25,16 @@ template<typename T>
name.remove_suffix(suffix.size());
return name;
}
template<typename T1, typename T2>
[[nodiscard]] consteval auto better_type_name(T1 v1, T2 v2)
{
if constexpr (type_name<T1>().size() < type_name<T2>().size())
return v1;
else if constexpr (type_name<T2>().size() < type_name<T1>().size())
return v2;
else if constexpr (type_name<T1>() < type_name<T2>())
return v1;
else
return v2;
}

View File

@ -629,8 +629,11 @@ template<Unit U1, Unit U2>
if constexpr (U1{} == U2{}) {
if constexpr (std::derived_from<U1, U2>)
return u1;
else
else if constexpr (std::derived_from<U2, U1>)
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{});