forked from mpusz/mp-units
feat: overloads with static_assert
added to improve migration
This commit is contained in:
@@ -166,6 +166,14 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename Value, Reference R2>
|
||||||
|
requires(!DeltaReference<R2>)
|
||||||
|
constexpr quantity(Value&&, R2)
|
||||||
|
{
|
||||||
|
static_assert(false,
|
||||||
|
"References using offset units (e.g., temperatures) must be explicitly qualified with `delta`");
|
||||||
|
}
|
||||||
|
|
||||||
template<detail::QuantityConvertibleTo<quantity> Q>
|
template<detail::QuantityConvertibleTo<quantity> Q>
|
||||||
// NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions)
|
// NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions)
|
||||||
constexpr explicit(!std::convertible_to<typename Q::rep, Rep>) quantity(const Q& q) :
|
constexpr explicit(!std::convertible_to<typename Q::rep, Rep>) quantity(const Q& q) :
|
||||||
@@ -433,6 +441,11 @@ template<typename Value, DeltaReference R>
|
|||||||
requires RepresentationOf<Value, get_quantity_spec(detail::get_original_reference(R{})).character>
|
requires RepresentationOf<Value, get_quantity_spec(detail::get_original_reference(R{})).character>
|
||||||
quantity(Value v, R) -> quantity<detail::get_original_reference(R{}), Value>;
|
quantity(Value v, R) -> quantity<detail::get_original_reference(R{}), Value>;
|
||||||
|
|
||||||
|
// the below is needed only to fire static_asserts in the constructor
|
||||||
|
template<typename Value, Reference R>
|
||||||
|
requires(!DeltaReference<R>) && RepresentationOf<Value, get_quantity_spec(R{}).character>
|
||||||
|
quantity(Value v, R) -> quantity<R{}, Value>;
|
||||||
|
|
||||||
template<QuantityLike Q>
|
template<QuantityLike Q>
|
||||||
explicit(
|
explicit(
|
||||||
is_specialization_of<decltype(quantity_like_traits<Q>::to_numerical_value(std::declval<Q>())), convert_explicitly>)
|
is_specialization_of<decltype(quantity_like_traits<Q>::to_numerical_value(std::declval<Q>())), convert_explicitly>)
|
||||||
|
@@ -219,6 +219,24 @@ operator/(Rep&& lhs, R)
|
|||||||
return quantity_point{std::forward<Rep>(lhs) * delta<inverse(detail::get_original_reference(R{}))>};
|
return quantity_point{std::forward<Rep>(lhs) * delta<inverse(detail::get_original_reference(R{}))>};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename Rep, Reference R>
|
||||||
|
requires(!DeltaReference<R>) && RepresentationOf<std::remove_cvref_t<Rep>, get_quantity_spec(R{}).character>
|
||||||
|
[[noreturn]] constexpr auto operator*(Rep&&, R)
|
||||||
|
{
|
||||||
|
static_assert(
|
||||||
|
false,
|
||||||
|
"References using offset units (e.g., temperatures) must be explicitly qualified with `delta` or `absolute`");
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename Rep, Reference R>
|
||||||
|
requires(!DeltaReference<R>) && RepresentationOf<std::remove_cvref_t<Rep>, get_quantity_spec(R{}).character>
|
||||||
|
[[noreturn]] constexpr auto operator/(Rep&&, R)
|
||||||
|
{
|
||||||
|
static_assert(
|
||||||
|
false,
|
||||||
|
"References using offset units (e.g., temperatures) must be explicitly qualified with `delta` or `absolute`");
|
||||||
|
}
|
||||||
|
|
||||||
template<Reference R, typename Rep>
|
template<Reference R, typename Rep>
|
||||||
requires RepresentationOf<std::remove_cvref_t<Rep>, get_quantity_spec(R{}).character>
|
requires RepresentationOf<std::remove_cvref_t<Rep>, get_quantity_spec(R{}).character>
|
||||||
// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
|
// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
|
||||||
|
Reference in New Issue
Block a user