mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-07 06:04:27 +02:00
feat: arithmetics on dimensionless quantities extended to units different than one
This commit is contained in:
@@ -333,44 +333,44 @@ public:
|
||||
[[nodiscard]] friend constexpr Quantity auto operator+(const quantity& lhs, const Value& rhs)
|
||||
requires requires { // TODO: Simplify when Clang catches up.
|
||||
requires !Quantity<Value>;
|
||||
requires unit == ::mp_units::one;
|
||||
requires dimension == dimension_one;
|
||||
requires detail::InvokeResultOf<quantity_spec.character, std::plus<>, rep, Value>;
|
||||
}
|
||||
{
|
||||
return (lhs.number() + rhs) * R;
|
||||
return lhs + rhs * ::mp_units::one;
|
||||
}
|
||||
|
||||
template<typename Value>
|
||||
[[nodiscard]] friend constexpr Quantity auto operator+(const Value& lhs, const quantity& rhs)
|
||||
requires requires { // TODO: Simplify when Clang catches up.
|
||||
requires !Quantity<Value>;
|
||||
requires unit == ::mp_units::one;
|
||||
requires dimension == dimension_one;
|
||||
requires detail::InvokeResultOf<quantity_spec.character, std::plus<>, Value, rep>;
|
||||
}
|
||||
{
|
||||
return (lhs + rhs.number()) * R;
|
||||
return lhs * ::mp_units::one + rhs;
|
||||
}
|
||||
|
||||
template<typename Value>
|
||||
[[nodiscard]] friend constexpr Quantity auto operator-(const quantity& lhs, const Value& rhs)
|
||||
requires requires { // TODO: Simplify when Clang catches up.
|
||||
requires !Quantity<Value>;
|
||||
requires unit == ::mp_units::one;
|
||||
requires dimension == dimension_one;
|
||||
requires detail::InvokeResultOf<quantity_spec.character, std::minus<>, rep, Value>;
|
||||
}
|
||||
{
|
||||
return (lhs.number() - rhs) * R;
|
||||
return lhs - rhs * ::mp_units::one;
|
||||
}
|
||||
|
||||
template<typename Value>
|
||||
[[nodiscard]] friend constexpr Quantity auto operator-(const Value& lhs, const quantity& rhs)
|
||||
requires requires { // TODO: Simplify when Clang catches up.
|
||||
requires !Quantity<Value>;
|
||||
requires unit == ::mp_units::one;
|
||||
requires dimension == dimension_one;
|
||||
requires detail::InvokeResultOf<quantity_spec.character, std::minus<>, Value, rep>;
|
||||
}
|
||||
{
|
||||
return (lhs - rhs.number()) * R;
|
||||
return lhs * ::mp_units::one - rhs;
|
||||
}
|
||||
|
||||
template<Representation Value>
|
||||
|
Reference in New Issue
Block a user