forked from mpusz/mp-units
fix: quantity_cast between different, equivalent dimensions
This commit is contained in:
committed by
Mateusz Pusz
parent
ba37c37abd
commit
98c15a2356
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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>>);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user