Skip to content

Commit f66dac4

Browse files
committed
Merge branch 'master' of github.com:mpusz/units
2 parents 66590b4 + b34c874 commit f66dac4

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

src/core/include/mp-units/framework/unit_magnitude.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,23 @@ template<detail::MagArg auto V>
7272
requires detail::is_nonzero_mag_arg<V>
7373
constexpr UnitMagnitude auto mag = detail::make_magnitude<V>();
7474

75+
#if MP_UNITS_COMP_MSVC
76+
// Workaround for MSVC ICE with ratio as NTTP in make_magnitude
77+
template<std::intmax_t N, std::intmax_t D>
78+
requires(N != 0)
79+
constexpr UnitMagnitude auto mag_ratio = []() consteval {
80+
constexpr auto abs_n = N < 0 ? -N : N;
81+
constexpr auto abs_mag = detail::prime_factorization_v<abs_n> / detail::prime_factorization_v<D>;
82+
if constexpr (N < 0)
83+
return detail::unit_magnitude<detail::negative_tag{}>{} * abs_mag;
84+
else
85+
return abs_mag;
86+
}();
87+
#else
7588
template<std::intmax_t N, std::intmax_t D>
7689
requires(N != 0)
7790
constexpr UnitMagnitude auto mag_ratio = detail::make_magnitude<detail::ratio{N, D}>();
91+
#endif
7892

7993
/**
8094
* @brief Create a Magnitude which is some rational number raised to a rational power.

0 commit comments

Comments
 (0)