constexpr bool add(stdx::type_identity_t<T> a, stdx::type_identity_t<T> b, T* r) {
#ifdef _MSC_VER
    return !SafeAdd(a, b, *r);
#else
    return __builtin_add_overflow(a, b, r);
#endif
}
constexpr bool add(stdx::type_identity_t<T> a, stdx::type_identity_t<T> b, T* r) {
#ifdef _MSC_VER
    return !SafeAdd(a, b, *r);
#else
    return __builtin_add_overflow(a, b, r);
#endif
}