forked from mpusz/mp-units
test: compile quantity(_kind)_test.cpp with downcasting on
This commit is contained in:
committed by
Mateusz Pusz
parent
3002c5673d
commit
03a417196a
@@ -287,10 +287,10 @@ template<Dimension ToD, Unit ToU, typename D, typename U, typename Rep>
|
|||||||
*/
|
*/
|
||||||
template<typename CastSpec, typename K, typename U, typename Rep>
|
template<typename CastSpec, typename K, typename U, typename Rep>
|
||||||
[[nodiscard]] constexpr QuantityKind auto quantity_kind_cast(const quantity_kind<K, U, Rep>& qk)
|
[[nodiscard]] constexpr QuantityKind auto quantity_kind_cast(const quantity_kind<K, U, Rep>& qk)
|
||||||
requires (is_specialization_of<CastSpec, quantity_kind> &&
|
requires requires { requires is_specialization_of<CastSpec, quantity_kind>;
|
||||||
requires { quantity_cast<typename CastSpec::quantity_type>(qk.common()); }) ||
|
requires requires { quantity_cast<typename CastSpec::quantity_type>(qk.common()); }; } ||
|
||||||
(Kind<CastSpec> && UnitOf<U, typename CastSpec::dimension>) ||
|
requires { requires Kind<CastSpec>; requires UnitOf<U, typename CastSpec::dimension>; } ||
|
||||||
requires { quantity_cast<CastSpec>(qk.common()); }
|
requires { requires requires { quantity_cast<CastSpec>(qk.common()); }; }
|
||||||
{
|
{
|
||||||
if constexpr (is_specialization_of<CastSpec, quantity_kind>)
|
if constexpr (is_specialization_of<CastSpec, quantity_kind>)
|
||||||
return CastSpec(quantity_cast<typename CastSpec::quantity_type>(qk.common()));
|
return CastSpec(quantity_cast<typename CastSpec::quantity_type>(qk.common()));
|
||||||
|
@@ -241,21 +241,21 @@ public:
|
|||||||
// Below friend functions are to be found via argument-dependent lookup only
|
// Below friend functions are to be found via argument-dependent lookup only
|
||||||
template<QuantityValue Value>
|
template<QuantityValue Value>
|
||||||
[[nodiscard]] friend constexpr QuantityKind auto operator*(const quantity_kind& qk, const Value& v)
|
[[nodiscard]] friend constexpr QuantityKind auto operator*(const quantity_kind& qk, const Value& v)
|
||||||
requires requires { { qk.common() * v } -> Quantity; }
|
requires requires(quantity_type q) { { q * v } -> Quantity; }
|
||||||
{
|
{
|
||||||
return detail::make_quantity_kind<quantity_kind>(qk.common() * v);
|
return detail::make_quantity_kind<quantity_kind>(qk.common() * v);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<QuantityValue Value>
|
template<QuantityValue Value>
|
||||||
[[nodiscard]] friend constexpr QuantityKind auto operator*(const Value& v, const quantity_kind& qk)
|
[[nodiscard]] friend constexpr QuantityKind auto operator*(const Value& v, const quantity_kind& qk)
|
||||||
requires requires { { v * qk.common() } -> Quantity; }
|
requires requires(quantity_type q) { { v * q } -> Quantity; }
|
||||||
{
|
{
|
||||||
return detail::make_quantity_kind<quantity_kind>(v * qk.common());
|
return detail::make_quantity_kind<quantity_kind>(v * qk.common());
|
||||||
}
|
}
|
||||||
|
|
||||||
template<QuantityValue Value>
|
template<QuantityValue Value>
|
||||||
[[nodiscard]] friend constexpr QuantityKind auto operator/(const quantity_kind& qk, const Value& v)
|
[[nodiscard]] friend constexpr QuantityKind auto operator/(const quantity_kind& qk, const Value& v)
|
||||||
requires requires { { qk.common() / v } -> Quantity; }
|
requires requires(quantity_type q) { { q / v } -> Quantity; }
|
||||||
{
|
{
|
||||||
gsl_ExpectsAudit(v != quantity_values<Value>::zero());
|
gsl_ExpectsAudit(v != quantity_values<Value>::zero());
|
||||||
return detail::make_quantity_kind<quantity_kind>(qk.common() / v);
|
return detail::make_quantity_kind<quantity_kind>(qk.common() / v);
|
||||||
@@ -263,7 +263,7 @@ public:
|
|||||||
|
|
||||||
template<QuantityValue Value>
|
template<QuantityValue Value>
|
||||||
[[nodiscard]] friend constexpr QuantityKind auto operator/(const Value& v, const quantity_kind& qk)
|
[[nodiscard]] friend constexpr QuantityKind auto operator/(const Value& v, const quantity_kind& qk)
|
||||||
requires requires { { v / qk.common() } -> Quantity; }
|
requires requires(quantity_type q) { { v / q } -> Quantity; }
|
||||||
{
|
{
|
||||||
gsl_ExpectsAudit(qk.common().count() != quantity_values<rep>::zero());
|
gsl_ExpectsAudit(qk.common().count() != quantity_values<rep>::zero());
|
||||||
return detail::downcasted_kind<quantity_kind>(v / qk.common());
|
return detail::downcasted_kind<quantity_kind>(v / qk.common());
|
||||||
@@ -271,7 +271,7 @@ public:
|
|||||||
|
|
||||||
template<QuantityValue Value>
|
template<QuantityValue Value>
|
||||||
[[nodiscard]] friend constexpr QuantityKind auto operator%(const quantity_kind& qk, const Value& v)
|
[[nodiscard]] friend constexpr QuantityKind auto operator%(const quantity_kind& qk, const Value& v)
|
||||||
requires requires { qk.common() % v; }
|
requires requires(quantity_type q) { q % v; }
|
||||||
{
|
{
|
||||||
gsl_ExpectsAudit(v != quantity_values<Value>::zero());
|
gsl_ExpectsAudit(v != quantity_values<Value>::zero());
|
||||||
return detail::make_quantity_kind<quantity_kind>(qk.common() % v);
|
return detail::make_quantity_kind<quantity_kind>(qk.common() % v);
|
||||||
|
Reference in New Issue
Block a user