diff --git a/src/corelib/global/qnumeric_p.h b/src/corelib/global/qnumeric_p.h index d40e6b964b0..1b88c28974b 100644 --- a/src/corelib/global/qnumeric_p.h +++ b/src/corelib/global/qnumeric_p.h @@ -23,6 +23,10 @@ #include #include +#ifdef __cpp_lib_saturation_arithmetic +# include // for saturate_cast +#endif + #ifndef __has_extension # define __has_extension(X) 0 #endif @@ -441,6 +445,9 @@ template bool mul_overflow(T v1, T *r) template static constexpr auto qt_saturate(From x) { +#ifdef __cpp_lib_saturation_arithmetic + return std::saturate_cast(x); +#else static_assert(std::is_integral_v); static_assert(std::is_integral_v); @@ -464,6 +471,7 @@ static constexpr auto qt_saturate(From x) using ToU = std::make_unsigned_t; return FromU(x) > ToU(Hi) ? Hi : To(x); // assumes Hi >= 0 } +#endif // __cpp_lib_saturation_arithmetic } QT_END_NAMESPACE