Scalar constraint added for quantity operators

This commit is contained in:
Mateusz Pusz
2019-10-08 21:26:18 +02:00
parent 458ac0918b
commit 040c703461

View File

@@ -155,11 +155,13 @@ namespace units {
{ {
return quantity_cast<quantity<ToU, ToRep>>(q); return quantity_cast<quantity<ToU, ToRep>>(q);
} }
template<Unit ToU, typename U, typename Rep> template<Unit ToU, typename U, typename Rep>
[[nodiscard]] constexpr quantity<ToU, Rep> quantity_cast(const quantity<U, Rep>& q) [[nodiscard]] constexpr quantity<ToU, Rep> quantity_cast(const quantity<U, Rep>& q)
{ {
return quantity_cast<quantity<ToU, Rep>>(q); return quantity_cast<quantity<ToU, Rep>>(q);
} }
template<Scalar ToRep, typename U, typename Rep> template<Scalar ToRep, typename U, typename Rep>
[[nodiscard]] constexpr quantity<U, ToRep> quantity_cast(const quantity<U, Rep>& q) [[nodiscard]] constexpr quantity<U, ToRep> quantity_cast(const quantity<U, Rep>& q)
{ {
@@ -295,8 +297,7 @@ namespace units {
return ret(ret(lhs).count() - ret(rhs).count()); return ret(ret(lhs).count() - ret(rhs).count());
} }
// template<typename U, typename Rep1, Scalar Rep2> template<typename U, typename Rep1, Scalar Rep2>
template<typename U, typename Rep1, typename Rep2>
[[nodiscard]] constexpr Quantity operator*(const quantity<U, Rep1>& q, [[nodiscard]] constexpr Quantity operator*(const quantity<U, Rep1>& q,
const Rep2& v) const Rep2& v)
requires (!Quantity<Rep2>) requires (!Quantity<Rep2>)
@@ -306,8 +307,7 @@ namespace units {
return ret(ret(q).count() * v); return ret(ret(q).count() * v);
} }
// template<Scalar Rep1, typename U, typename Rep2> template<Scalar Rep1, typename U, typename Rep2>
template<typename Rep1, typename U, typename Rep2>
[[nodiscard]] constexpr Quantity operator*(const Rep1& v, [[nodiscard]] constexpr Quantity operator*(const Rep1& v,
const quantity<U, Rep2>& q) const quantity<U, Rep2>& q)
requires (!Quantity<Rep1>) requires (!Quantity<Rep1>)
@@ -338,8 +338,7 @@ namespace units {
return ret(lhs.count() * rhs.count()); return ret(lhs.count() * rhs.count());
} }
// template<Scalar Rep1, typename U, typename Rep2> template<Scalar Rep1, typename U, typename Rep2>
template<typename Rep1, typename U, typename Rep2>
[[nodiscard]] constexpr Quantity operator/(const Rep1& v, [[nodiscard]] constexpr Quantity operator/(const Rep1& v,
const quantity<U, Rep2>& q) const quantity<U, Rep2>& q)
requires (!Quantity<Rep1>) requires (!Quantity<Rep1>)
@@ -353,8 +352,7 @@ namespace units {
return ret(v / den(q).count()); return ret(v / den(q).count());
} }
// template<typename U, typename Rep1, Scalar Rep2> template<typename U, typename Rep1, Scalar Rep2>
template<typename U, typename Rep1, typename Rep2>
[[nodiscard]] constexpr Quantity operator/(const quantity<U, Rep1>& q, [[nodiscard]] constexpr Quantity operator/(const quantity<U, Rep1>& q,
const Rep2& v) const Rep2& v)
requires (!Quantity<Rep2>) requires (!Quantity<Rep2>)