fix: quantity_cast between different, equivalent dimensions

This commit is contained in:
Johel Ernesto Guerrero Peña
2021-01-18 15:55:55 -04:00
committed by Mateusz Pusz
parent ba37c37abd
commit 98c15a2356
2 changed files with 8 additions and 2 deletions

View File

@@ -145,7 +145,7 @@ template<Dimension ToD, typename D, typename U, typename Rep>
requires equivalent<ToD, D> requires equivalent<ToD, D>
[[nodiscard]] constexpr auto quantity_cast(const quantity<D, U, Rep>& q) [[nodiscard]] constexpr auto quantity_cast(const quantity<D, U, Rep>& q)
{ {
return quantity_cast<quantity<ToD, dimension_unit<ToD>, Rep>>(q); return quantity_cast<quantity<ToD, downcast_unit<ToD, U::ratio>, Rep>>(q);
} }
/** /**

View File

@@ -37,7 +37,11 @@
namespace { namespace {
using namespace units; using namespace units;
using namespace units::physical::si; namespace si = physical::si;
using namespace si;
using namespace unit_constants;
constexpr auto cgs_cm = cgs::unit_constants::cm;
////////////////////////////// //////////////////////////////
@@ -685,6 +689,8 @@ static_assert(quantity_cast<kilometre>(2000_q_m).count() == 2);
static_assert(quantity_cast<int>(1.23_q_m).count() == 1); static_assert(quantity_cast<int>(1.23_q_m).count() == 1);
static_assert(quantity_cast<dim_speed, kilometre_per_hour>(2000.0_q_m / 3600.0_q_s).count() == 2); static_assert(quantity_cast<dim_speed, kilometre_per_hour>(2000.0_q_m / 3600.0_q_s).count() == 2);
static_assert(quantity_cast<dim_length>(1 * cgs_cm) == 1 * cm);
static_assert(is_same_v<decltype(quantity_cast<litre>(2_q_dm3)), volume<litre, std::int64_t>>); static_assert(is_same_v<decltype(quantity_cast<litre>(2_q_dm3)), volume<litre, std::int64_t>>);
static_assert(!is_same_v<decltype(quantity_cast<litre>(2_q_dm3)), volume<cubic_decimetre, std::int64_t>>); static_assert(!is_same_v<decltype(quantity_cast<litre>(2_q_dm3)), volume<cubic_decimetre, std::int64_t>>);