Effects: Equivalent to:
if constexpr (sizeof...(us) == 1)
return u1;
else if constexpr (sizeof...(us) == 2) {
if constexpr (is-derived-from-specialization-of<U1, common_unit>()) {
return TBD.;
} else if constexpr (is-derived-from-specialization-of<U2, common_unit>())
return get_common_unit(u2, u1);
else if constexpr (std::is_same_v<U1, U2>)
return u1;
else if constexpr (equivalent(U1{}, U2{})) {
if constexpr (std::derived_from<U1, typename U2::base-type>)
return u1;
else if constexpr (std::derived_from<U2, typename U1::base-type>)
return u2;
else
return std::conditional_t<type-less-impl<U1, U2>(), U1, U2>{};
} else {
constexpr auto canonical_lhs = get-canonical-unit(U1{});
constexpr auto canonical_rhs = get-canonical-unit(U2{});
if constexpr (is-positive-integral-power(canonical_lhs.mag / canonical_rhs.mag))
return u2;
else if constexpr (is-positive-integral-power(canonical_rhs.mag / canonical_lhs.mag))
return u1;
else {
if constexpr (type-less<U1, U2>{})
return common_unit<U1, U2>{};
else
return common_unit<U2, U1>{};
}
}
} else
return get_common_unit(get_common_unit(u1, u2), rest...);