From 6c1062e166238b560c78e789122e1badd3c5971e Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Sat, 14 May 2022 11:22:09 +0200 Subject: [PATCH] fix: `UNITS_MSVC_WORKAROUND()` added --- src/core/include/units/bits/common_type.h | 6 +++--- src/core/include/units/bits/external/hacks.h | 10 ++++++++++ src/core/include/units/derived_dimension.h | 2 +- src/core/include/units/prefix.h | 2 +- src/core/include/units/unit.h | 2 +- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/core/include/units/bits/common_type.h b/src/core/include/units/bits/common_type.h index 40880927..46f7cb5f 100644 --- a/src/core/include/units/bits/common_type.h +++ b/src/core/include/units/bits/common_type.h @@ -67,9 +67,9 @@ struct common_quantity_reference_impl, reference> { template struct common_quantity_reference_impl, reference> { using dimension = conditional, D2, D1>; - static constexpr Magnitude auto m1 = D1::base_units_ratio * U1::mag; - static constexpr 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 m1 = D1::base_units_ratio * U1::mag; + static constexpr UNITS_MSVC_WORKAROUND(Magnitude) auto m2 = D2::base_units_ratio * U2::mag; + static constexpr UNITS_MSVC_WORKAROUND(Magnitude) auto cm = common_magnitude(m1, m2); using unit = downcast_unit; using type = reference; }; diff --git a/src/core/include/units/bits/external/hacks.h b/src/core/include/units/bits/external/hacks.h index 5a983540..169718ba 100644 --- a/src/core/include/units/bits/external/hacks.h +++ b/src/core/include/units/bits/external/hacks.h @@ -100,6 +100,16 @@ #endif +#if UNITS_COMP_MSVC + +#define UNITS_MSVC_WORKAROUND(X) + +#else + +#define UNITS_MSVC_WORKAROUND(X) (X) + +#endif + namespace std { diff --git a/src/core/include/units/derived_dimension.h b/src/core/include/units/derived_dimension.h index 76c8dc9f..cfe0830c 100644 --- a/src/core/include/units/derived_dimension.h +++ b/src/core/include/units/derived_dimension.h @@ -85,7 +85,7 @@ template struct derived_dimension : downcast_dispatch> { using recipe = exponent_list; 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()); }; diff --git a/src/core/include/units/prefix.h b/src/core/include/units/prefix.h index e460b4de..0a95499c 100644 --- a/src/core/include/units/prefix.h +++ b/src/core/include/units/prefix.h @@ -36,7 +36,7 @@ namespace detail { template struct prefix_base : downcast_base> { - static constexpr Magnitude auto mag = as_magnitude(); + static constexpr UNITS_MSVC_WORKAROUND(Magnitude) auto mag = as_magnitude(); }; } // namespace detail diff --git a/src/core/include/units/unit.h b/src/core/include/units/unit.h index c429f837..3e4f7253 100644 --- a/src/core/include/units/unit.h +++ b/src/core/include/units/unit.h @@ -60,7 +60,7 @@ inline constexpr bool can_be_prefixed = false; */ template struct scaled_unit : downcast_base> { - static constexpr Magnitude auto mag = M; + static constexpr UNITS_MSVC_WORKAROUND(Magnitude) auto mag = M; using reference = U; };