https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100805
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Harald van Dijk from comment #2) > __int128 behaves mostly like an integer type but is not an "extended integer > type" as defined in the standard. Quoting from > https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html: "GCC does > not support any extended integer types." Extended integer types must meet > specific requirements that __int128 does not meet: extended integer types > cannot be larger than intmax_t, and __int128 is. Right. > Despite __int128 not being an extended integer type, there is nothing wrong > with having __int128 enabled in standards-conforming mode. Out-of-range > constants must be diagnosed, but they already are, and continuing to accept > the program after that is valid. Indeed, a warning is a diagnostic. > The warning that is generated for the out-of-range constant is highly > misleading though: the warning says "integer constant is so large that it is > unsigned". Either the constant should be given an unsigned type, or the > warning should be updated to reflect the type the constant actually gets. Agreed. Going back to David's original point: Whether or not the implicit conversion to __int128 is enabled for strict modes, the __int128 type itself needs to be enabled. Libstdc++ relies on it existing.