mirror of
https://github.com/mpusz/mp-units.git
synced 2025-06-25 01:01:33 +02:00
feat: might_store_converted_common_value
added to detect conversions overflowing rep
Resolves #670, resolves #671, resolves #658, resolves #303
This commit is contained in:
@ -278,4 +278,9 @@ static_assert(compare(kind_of<isq::time>(inverse<s>(1. * kHz)), 0.001 * s));
|
||||
// check if constraints work properly for a derived unit of a narrowed kind
|
||||
static_assert(compare(kind_of<isq::frequency>(inverse<Hz>(1 * s)), 1 * Hz));
|
||||
|
||||
// overflow in conversion
|
||||
template<auto Q>
|
||||
concept overflowing_inverse = requires { requires !requires { inverse<si::hertz>(Q); }; };
|
||||
static_assert(overflowing_inverse<10'000'000 * si::femto<si::second>>);
|
||||
|
||||
} // namespace
|
||||
|
@ -1364,4 +1364,20 @@ static_assert(!QuantityOf<decltype(10 * isq::width[m]), isq::height>);
|
||||
static_assert(QuantityOf<decltype(10 * isq::speed[m / s]), isq::speed>);
|
||||
static_assert(QuantityOf<decltype(20 * isq::length[m] / (2 * isq::time[s])), isq::speed>); // derived unnamed quantity
|
||||
|
||||
// overflowing unit conversions
|
||||
template<auto Q>
|
||||
concept overflowing_unit_conversion = requires {
|
||||
requires !requires { quantity<si::metre, std::int8_t>(Q); };
|
||||
requires !requires { quantity<si::milli<si::metre>, std::int16_t>(Q); };
|
||||
requires !requires { Q.in(si::metre); };
|
||||
requires !requires { Q.force_in(si::metre); };
|
||||
requires !requires { Q + std::int8_t(1) * nm; }; // promotion to int
|
||||
requires !requires { Q - std::int8_t(1) * nm; }; // promotion to int
|
||||
requires !requires { Q % std::int8_t(1) * m; };
|
||||
requires !requires { Q == std::int8_t(1) * m; };
|
||||
requires !requires { Q < std::int8_t(1) * m; };
|
||||
requires !requires { typename std::common_type_t<decltype(Q), quantity<si::metre, std::int8_t>>; };
|
||||
};
|
||||
static_assert(overflowing_unit_conversion<std::int8_t(1) * km>);
|
||||
|
||||
} // namespace
|
||||
|
Reference in New Issue
Block a user