https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121819
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Romain Geissler from comment #0) > Would it make sense to remove the "&& defined __STRICT_ANSI__" part on > libstdc++ side so that type_traits work for the __int128 extension even in > strict mode ? After all, gcc still defines the extension even in strict mode. The problem was that the language rules did not allow us to make is_integral<int128> true, because if we said it was an integral type then intmax_t would need to be at least 128 bits. That works be an ABI break, and require a new glibc. C23 relaxed the rules for intmax_t (and C++ followed) so that implementations are not required to either change intmax_t or have this weird "it's an integer type but it's not" situation. Previously we followed the rule for strict modes, to be strictly conforming, and broke the silly rule for non-strict modes, better obviously it should be an integer. The new rule allows us to do the right thing in strict modes.
