fix: std::isnan compilation fixed for freestanding and C++20

This commit is contained in:
Mateusz Pusz
2025-02-05 18:16:15 +01:00
parent 88439828a5
commit e5d2b95a1b

View File

@ -26,6 +26,9 @@
import std;
#else
#include <limits>
#if MP_UNITS_HOSTED
#include <cmath>
#endif // MP_UNITS_HOSTED
#endif
namespace {
@ -94,12 +97,16 @@ static_assert(std::numeric_limits<q_double>::infinity().numerical_value_in(mp_un
static_assert(std::numeric_limits<q_int>::infinity().numerical_value_in(mp_units::si::metre) ==
std::numeric_limits<int>::infinity());
#if MP_UNITS_HOSTED && (__cpp_lib_constexpr_cmath || MP_UNITS_COMP_GCC)
// quiet_NaN
static_assert(std::isnan(std::numeric_limits<q_double>::quiet_NaN().numerical_value_in(mp_units::si::metre)));
// signaling_NaN
static_assert(std::isnan(std::numeric_limits<q_double>::signaling_NaN().numerical_value_in(mp_units::si::metre)));
#endif
// denorm_min
static_assert(std::numeric_limits<q_double>::denorm_min().numerical_value_in(mp_units::si::metre) ==
std::numeric_limits<double>::denorm_min());
@ -171,6 +178,8 @@ static_assert(std::numeric_limits<qp_double>::infinity().quantity_from_zero().nu
static_assert(std::numeric_limits<qp_int>::infinity().quantity_from_zero().numerical_value_in(mp_units::si::metre) ==
std::numeric_limits<int>::infinity());
#if MP_UNITS_HOSTED && (__cpp_lib_constexpr_cmath || MP_UNITS_COMP_GCC)
// quiet_NaN
static_assert(
std::isnan(std::numeric_limits<qp_double>::quiet_NaN().quantity_from_zero().numerical_value_in(mp_units::si::metre)));
@ -179,6 +188,8 @@ static_assert(
static_assert(std::isnan(
std::numeric_limits<qp_double>::signaling_NaN().quantity_from_zero().numerical_value_in(mp_units::si::metre)));
#endif
// denorm_min
static_assert(std::numeric_limits<qp_double>::denorm_min().quantity_from_zero().numerical_value_in(
mp_units::si::metre) == std::numeric_limits<double>::denorm_min());