mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-03 12:24:26 +02:00
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>
|
||||
// NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions)
|
||||
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>
|
||||
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>
|
||||
explicit(
|
||||
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{}))>};
|
||||
}
|
||||
|
||||
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>
|
||||
requires RepresentationOf<std::remove_cvref_t<Rep>, get_quantity_spec(R{}).character>
|
||||
// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
|
||||
|
Reference in New Issue
Block a user