mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-03 04:14:27 +02:00
feat: force_in(U)
support added
This commit is contained in:
@@ -141,6 +141,20 @@ public:
|
|||||||
quantity& operator=(const quantity&) = default;
|
quantity& operator=(const quantity&) = default;
|
||||||
quantity& operator=(quantity&&) = default;
|
quantity& operator=(quantity&&) = default;
|
||||||
|
|
||||||
|
// conversions
|
||||||
|
template<Unit U>
|
||||||
|
requires detail::QuantityConvertibleTo<quantity, quantity<quantity_spec[U{}], Rep>>
|
||||||
|
[[nodiscard]] constexpr quantity<quantity_spec[U{}], Rep> in(U) const
|
||||||
|
{
|
||||||
|
return quantity<quantity_spec[U{}], Rep>{*this};
|
||||||
|
}
|
||||||
|
template<Unit U>
|
||||||
|
requires requires(quantity q) { value_cast<U{}>(q); }
|
||||||
|
[[nodiscard]] constexpr quantity<quantity_spec[U{}], Rep> force_in(U) const
|
||||||
|
{
|
||||||
|
return value_cast<U{}>(*this);
|
||||||
|
}
|
||||||
|
|
||||||
// data access
|
// data access
|
||||||
#ifdef __cpp_explicit_this_parameter
|
#ifdef __cpp_explicit_this_parameter
|
||||||
template<typename Self, Unit U>
|
template<typename Self, Unit U>
|
||||||
@@ -190,13 +204,6 @@ public:
|
|||||||
return value_cast<U{}>(*this).numerical_value_in(U{});
|
return value_cast<U{}>(*this).numerical_value_in(U{});
|
||||||
}
|
}
|
||||||
|
|
||||||
template<Unit U>
|
|
||||||
requires detail::QuantityConvertibleTo<quantity, quantity<quantity_spec[U{}], Rep>>
|
|
||||||
[[nodiscard]] constexpr quantity<quantity_spec[U{}], Rep> in(U) const
|
|
||||||
{
|
|
||||||
return quantity<quantity_spec[U{}], Rep>{*this};
|
|
||||||
}
|
|
||||||
|
|
||||||
// member unary operators
|
// member unary operators
|
||||||
[[nodiscard]] constexpr Quantity auto operator+() const
|
[[nodiscard]] constexpr Quantity auto operator+() const
|
||||||
requires requires(rep v) {
|
requires requires(rep v) {
|
||||||
|
@@ -900,6 +900,10 @@ static_assert(value_cast<km>(2000 * m).numerical_value_ref_in(km) == 2);
|
|||||||
static_assert(value_cast<int>(1.23 * m).numerical_value_ref_in(m) == 1);
|
static_assert(value_cast<int>(1.23 * m).numerical_value_ref_in(m) == 1);
|
||||||
static_assert(value_cast<km / h>(2000.0 * m / (3600.0 * s)).numerical_value_ref_in(km / h) == 2);
|
static_assert(value_cast<km / h>(2000.0 * m / (3600.0 * s)).numerical_value_ref_in(km / h) == 2);
|
||||||
|
|
||||||
|
static_assert((2 * km).force_in(m).numerical_value_ref_in(m) == 2000);
|
||||||
|
static_assert((2000 * m).force_in(km).numerical_value_ref_in(km) == 2);
|
||||||
|
static_assert((2000.0 * m / (3600.0 * s)).force_in(km / h).numerical_value_ref_in(km / h) == 2);
|
||||||
|
|
||||||
//////////////////
|
//////////////////
|
||||||
// quantity_cast
|
// quantity_cast
|
||||||
//////////////////
|
//////////////////
|
||||||
|
Reference in New Issue
Block a user