mirror of
https://github.com/mpusz/mp-units.git
synced 2025-07-31 19:04:27 +02:00
feat: multiply syntax support to create quantity_point
This commit is contained in:
@@ -198,6 +198,26 @@ template<typename Rep, RelativeReference R>
|
||||
return quantity{std::forward<Rep>(lhs), relative(inverse(detail::get_original_reference(R{})))};
|
||||
}
|
||||
|
||||
template<typename Rep, AbsoluteReference R>
|
||||
requires RepresentationOf<std::remove_cvref_t<Rep>, get_quantity_spec(detail::get_original_reference(R{})).character>
|
||||
[[nodiscard]] constexpr quantity_point<detail::get_original_reference(R{}),
|
||||
default_point_origin(detail::get_original_reference(R{})),
|
||||
std::remove_cvref_t<Rep>>
|
||||
operator*(Rep&& lhs, R)
|
||||
{
|
||||
return quantity_point{std::forward<Rep>(lhs) * relative(detail::get_original_reference(R{}))};
|
||||
}
|
||||
|
||||
template<typename Rep, AbsoluteReference R>
|
||||
requires RepresentationOf<std::remove_cvref_t<Rep>, get_quantity_spec(detail::get_original_reference(R{})).character>
|
||||
[[nodiscard]] constexpr quantity_point<inverse(detail::get_original_reference(R{})),
|
||||
default_point_origin(detail::get_original_reference(R{})),
|
||||
std::remove_cvref_t<Rep>>
|
||||
operator/(Rep&& lhs, R)
|
||||
{
|
||||
return quantity_point{std::forward<Rep>(lhs) * relative(inverse(detail::get_original_reference(R{})))};
|
||||
}
|
||||
|
||||
template<Reference R, typename Rep>
|
||||
requires RepresentationOf<std::remove_cvref_t<Rep>, get_quantity_spec(R{}).character>
|
||||
// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
|
||||
|
@@ -801,9 +801,12 @@ static_assert(
|
||||
//////////////////////////////////
|
||||
|
||||
static_assert(quantity_point{42 * m}.quantity_from_zero() == 42 * m);
|
||||
static_assert((42 * absolute(m)).quantity_from_zero() == 42 * m);
|
||||
static_assert(quantity_point{isq::height(42 * m)}.quantity_from_zero() == 42 * m);
|
||||
static_assert(quantity_point{20 * relative(deg_C)}.quantity_from_zero() == 20 * relative(deg_C));
|
||||
static_assert((20 * absolute(deg_C)).quantity_from_zero() == 20 * relative(deg_C));
|
||||
static_assert(quantity_point{20. * relative(deg_C)}.in(deg_F).quantity_from_zero() == 68 * relative(deg_F));
|
||||
static_assert((20. * absolute(deg_C)).in(deg_F).quantity_from_zero() == 68 * relative(deg_F));
|
||||
|
||||
static_assert((mean_sea_level + 42 * m).quantity_from_zero() == 42 * m);
|
||||
static_assert((ground_level + 42 * m).quantity_from_zero() == 84 * m);
|
||||
@@ -889,13 +892,12 @@ static_assert(std::is_same_v<std::remove_const_t<decltype(quantity_point{isq::he
|
||||
static_assert(quantity_point{isq::height(123 * m)}.unit == si::metre);
|
||||
static_assert(quantity_point{isq::height(123 * m)}.quantity_spec == isq::height);
|
||||
|
||||
static_assert(std::is_same_v<decltype(quantity_point{20 * relative(deg_C)})::rep, int>);
|
||||
static_assert(std::is_same_v<std::remove_const_t<decltype(quantity_point{20 * relative(deg_C)}.point_origin)>,
|
||||
struct si::ice_point>);
|
||||
static_assert(std::is_same_v<std::remove_const_t<decltype(quantity_point{20 * relative(deg_C)}.absolute_point_origin)>,
|
||||
static_assert(std::is_same_v<decltype(20 * absolute(deg_C))::rep, int>);
|
||||
static_assert(std::is_same_v<std::remove_const_t<decltype((20 * absolute(deg_C)).point_origin)>, struct si::ice_point>);
|
||||
static_assert(std::is_same_v<std::remove_const_t<decltype((20 * absolute(deg_C)).absolute_point_origin)>,
|
||||
struct si::absolute_zero>);
|
||||
static_assert(quantity_point{20 * relative(deg_C)}.unit == si::degree_Celsius);
|
||||
static_assert(quantity_point{20 * relative(deg_C)}.quantity_spec == kind_of<isq::thermodynamic_temperature>);
|
||||
static_assert((20 * absolute(deg_C)).unit == si::degree_Celsius);
|
||||
static_assert((20 * absolute(deg_C)).quantity_spec == kind_of<isq::thermodynamic_temperature>);
|
||||
|
||||
#if MP_UNITS_HOSTED
|
||||
using namespace std::chrono_literals;
|
||||
|
Reference in New Issue
Block a user