refactor: MP_UNITS_NONCONST_TYPE introduced to benefit from the C++23 feature

This commit is contained in:
Mateusz Pusz
2024-11-13 21:13:22 +01:00
parent 5cd07bc621
commit 2590aa4b80
17 changed files with 64 additions and 59 deletions
+7 -8
View File
@@ -89,7 +89,7 @@ inline constexpr struct speed_of_light_in_vacuum_ final : named_unit<"c", mag<29
static_assert(Unit<metre_>);
static_assert(Unit<second_>);
static_assert(Unit<nu_second_>);
static_assert(Unit<std::remove_const_t<decltype(kilogram)>>);
static_assert(Unit<MP_UNITS_NONCONST_TYPE(kilogram)>);
static_assert(Unit<hertz_>);
static_assert(Unit<newton_>);
static_assert(Unit<minute_>);
@@ -101,20 +101,20 @@ static_assert(Unit<decltype(second * second)>);
static_assert(Unit<decltype(nu_second * nu_second)>);
static_assert(Unit<decltype(metre / second)>);
static_assert(Unit<decltype(nu_second / nu_second)>);
static_assert(Unit<std::remove_const_t<decltype(kilometre)>>);
static_assert(Unit<MP_UNITS_NONCONST_TYPE(kilometre)>);
static_assert(PrefixableUnit<metre_>);
static_assert(PrefixableUnit<hertz_>);
static_assert(PrefixableUnit<newton_>);
static_assert(PrefixableUnit<minute_>);
static_assert(PrefixableUnit<radian_>);
static_assert(!PrefixableUnit<std::remove_const_t<decltype(kilogram)>>);
static_assert(!PrefixableUnit<MP_UNITS_NONCONST_TYPE(kilogram)>);
static_assert(!PrefixableUnit<decltype(kilojoule)>);
static_assert(!PrefixableUnit<si::kilo_<struct gram_>>);
static_assert(!PrefixableUnit<decltype(square(metre))>);
static_assert(!PrefixableUnit<decltype(cubic(metre))>);
static_assert(!PrefixableUnit<decltype(mag<60> * second)>);
static_assert(!PrefixableUnit<std::remove_const_t<decltype(kilometre)>>);
static_assert(!PrefixableUnit<MP_UNITS_NONCONST_TYPE(kilometre)>);
// named unit
static_assert(is_of_type<metre, metre_>);
@@ -194,14 +194,14 @@ static_assert(standard_gravity != metre / square(second)); // magnitude is diff
static_assert(standard_gravity._symbol_ == symbol_text{u8"g₀", "g_0"});
// prefixed_unit
static_assert(is_of_type<kilometre, std::remove_const_t<decltype(kilo<metre>)>>);
static_assert(is_of_type<kilometre, MP_UNITS_NONCONST_TYPE(kilo<metre>)>);
static_assert(is_of_type<get_canonical_unit(kilometre).reference_unit, metre_>);
static_assert(get_canonical_unit(kilometre).mag == mag<1000>);
static_assert(convertible(kilometre, metre));
static_assert(kilometre != metre);
static_assert(kilometre._symbol_ == "km");
static_assert(is_of_type<kilojoule, std::remove_const_t<decltype(kilo<joule>)>>);
static_assert(is_of_type<kilojoule, MP_UNITS_NONCONST_TYPE(kilo<joule>)>);
static_assert(is_of_type<get_canonical_unit(kilojoule).reference_unit,
derived_unit<gram_, power<metre_, 2>, per<power<second_, 2>>>>);
static_assert(get_canonical_unit(kilojoule).mag == mag<1'000'000>);
@@ -212,8 +212,7 @@ static_assert(kilojoule._symbol_ == "kJ");
static_assert(is_of_type<kilo<metre>, kilo_<metre_>>);
static_assert(is_of_type<kilo<joule>, kilo_<joule_>>);
static_assert(
is_of_type<kilometre / metre, derived_unit<std::remove_const_t<decltype(kilo<metre>)>, per<metre_>>>); // !!!
static_assert(is_of_type<kilometre / metre, derived_unit<MP_UNITS_NONCONST_TYPE(kilo<metre>), per<metre_>>>); // !!!
// prefixes