__GNUC_PREREQ__
#elif __GNUC_PREREQ__(4, 7)
#if __GNUC_PREREQ__(5, 1) || __has_builtin(__builtin_add_overflow)
#if __GNUC_PREREQ__(5, 1) || __has_builtin(__builtin_sub_overflow)
#if __GNUC_PREREQ__(5, 1) || __has_builtin(__builtin_mul_overflow)
#elif __GNUC_PREREQ__(7, 1) && !defined(__clang__)
#elif __GNUC_PREREQ__(6, 1) && !defined(__clang__)
#if !defined(__clang__) && __GNUC_PREREQ__(15, 0)
#elif __GNUC_PREREQ__(4, 7)