Give up on implicit conversion

I don't understand what MSVC is complaining about, and it may end up
being easier to just make the conversion explicit.
This commit is contained in:
Chip Hogg
2022-04-06 01:40:17 +00:00
parent f77a92ca04
commit b616e58216
2 changed files with 7 additions and 9 deletions

View File

@@ -517,16 +517,14 @@ constexpr auto numerator(magnitude<BPs...>)
constexpr auto denominator(Magnitude auto m) { return numerator(pow<-1>(m)); }
// Implementation of implicit conversion to ratio goes here, because it needs `numerator()` and `denominator()`.
template<BasePower auto... BPs>
requires detail::is_base_power_pack_valid<BPs...>
constexpr magnitude<BPs...>::operator ratio() const
// Implementation of conversion to ratio goes here, because it needs `numerator()` and `denominator()`.
constexpr ratio as_ratio(Magnitude auto m)
{
static_assert(is_rational(magnitude<BPs...>{}));
static_assert(is_rational(m));
return ratio{
get_value<std::intmax_t>(numerator(*this)),
get_value<std::intmax_t>(denominator(*this)),
get_value<std::intmax_t>(numerator(m)),
get_value<std::intmax_t>(denominator(m)),
};
}

View File

@@ -374,9 +374,9 @@ TEST_CASE("Constructing ratio from rational magnitude")
check_ratio_round_trip_is_identity<ratio{5, 8}>();
}
SECTION("Rational magnitude implicitly converts to ratio")
SECTION("Rational magnitude converts to ratio")
{
constexpr ratio r = as_magnitude<ratio{22, 7}>();
constexpr ratio r = as_ratio(as_magnitude<ratio{22, 7}>());
CHECK(r == ratio{22, 7});
}