fix: UNITS_MSVC_WORKAROUND() added

This commit is contained in:
Mateusz Pusz
2022-05-14 11:22:09 +02:00
parent 86b81c9384
commit 6c1062e166
5 changed files with 16 additions and 6 deletions

View File

@@ -67,9 +67,9 @@ struct common_quantity_reference_impl<reference<D1, U1>, reference<D2, U2>> {
template<typename D1, typename U1, typename D2, typename U2> template<typename D1, typename U1, typename D2, typename U2>
struct common_quantity_reference_impl<reference<D1, U1>, reference<D2, U2>> { struct common_quantity_reference_impl<reference<D1, U1>, reference<D2, U2>> {
using dimension = conditional<is_specialization_of<D1, unknown_dimension>, D2, D1>; using dimension = conditional<is_specialization_of<D1, unknown_dimension>, D2, D1>;
static constexpr Magnitude auto m1 = D1::base_units_ratio * U1::mag; static constexpr UNITS_MSVC_WORKAROUND(Magnitude) auto m1 = D1::base_units_ratio * U1::mag;
static constexpr Magnitude auto m2 = D2::base_units_ratio * U2::mag; static constexpr UNITS_MSVC_WORKAROUND(Magnitude) auto m2 = D2::base_units_ratio * U2::mag;
static constexpr Magnitude auto cm = common_magnitude(m1, m2); static constexpr UNITS_MSVC_WORKAROUND(Magnitude) auto cm = common_magnitude(m1, m2);
using unit = downcast_unit<dimension, cm / dimension::base_units_ratio>; using unit = downcast_unit<dimension, cm / dimension::base_units_ratio>;
using type = reference<dimension, unit>; using type = reference<dimension, unit>;
}; };

View File

@@ -100,6 +100,16 @@
#endif #endif
#if UNITS_COMP_MSVC
#define UNITS_MSVC_WORKAROUND(X)
#else
#define UNITS_MSVC_WORKAROUND(X) (X)
#endif
namespace std { namespace std {

View File

@@ -85,7 +85,7 @@ template<typename Child, Unit U, Exponent... Es>
struct derived_dimension : downcast_dispatch<Child, typename detail::make_dimension<Es...>> { struct derived_dimension : downcast_dispatch<Child, typename detail::make_dimension<Es...>> {
using recipe = exponent_list<Es...>; using recipe = exponent_list<Es...>;
using coherent_unit = U; using coherent_unit = U;
static constexpr Magnitude auto base_units_ratio = static constexpr UNITS_MSVC_WORKAROUND(Magnitude) auto base_units_ratio =
detail::absolute_magnitude(typename derived_dimension::exponents()); detail::absolute_magnitude(typename derived_dimension::exponents());
}; };

View File

@@ -36,7 +36,7 @@ namespace detail {
template<ratio R> template<ratio R>
struct prefix_base : downcast_base<prefix_base<R>> { struct prefix_base : downcast_base<prefix_base<R>> {
static constexpr Magnitude auto mag = as_magnitude<R>(); static constexpr UNITS_MSVC_WORKAROUND(Magnitude) auto mag = as_magnitude<R>();
}; };
} // namespace detail } // namespace detail

View File

@@ -60,7 +60,7 @@ inline constexpr bool can_be_prefixed = false;
*/ */
template<Magnitude auto M, typename U> template<Magnitude auto M, typename U>
struct scaled_unit : downcast_base<scaled_unit<M, U>> { struct scaled_unit : downcast_base<scaled_unit<M, U>> {
static constexpr Magnitude auto mag = M; static constexpr UNITS_MSVC_WORKAROUND(Magnitude) auto mag = M;
using reference = U; using reference = U;
}; };