goo/GooCheckedOps.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
New commits: commit f4364adf48b0217297021beed3eaf59a64ec5f45 Author: Albert Astals Cid <[email protected]> Date: Wed Dec 1 11:23:50 2021 +0100 Make checkedMultiply work for long long in MSVC diff --git a/goo/GooCheckedOps.h b/goo/GooCheckedOps.h index 2bf13d01..a87a3e68 100644 --- a/goo/GooCheckedOps.h +++ b/goo/GooCheckedOps.h @@ -87,6 +87,21 @@ inline bool checkedMultiply(T x, T y, T *z) #endif } +template<> +inline bool checkedMultiply<long long>(long long x, long long y, long long *z) +{ +#if __GNUC__ >= 5 || __has_builtin(__builtin_mul_overflow) + return __builtin_mul_overflow(x, y, z); +#else + if (x != 0 && (std::numeric_limits<long long>::max)() / x < y) { + return true; + } + + *z = x * y; + return false; +#endif +} + template<typename T> inline T safeAverage(T a, T b) {
