14 inline size_t mul(
size_t a,
size_t b)
18 if (SUCCEEDED(SIZETMult(a, b, &result)))
20#elif defined(_MSC_VER)
23 if (b <= SIZE_MAX / a)
27 if (!__builtin_mul_overflow(a, b, &result))
30 throw std::invalid_argument(
"multiply overflow");
33 inline size_t add(
size_t a,
size_t b)
37 if (SUCCEEDED(SIZETAdd(a, b, &result)))
39#elif defined(_MSC_VER)
40 if (a <= SIZE_MAX - b)
44 if (!__builtin_add_overflow(a, b, &result))
47 throw std::invalid_argument(
"add overflow");