https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108099
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- __int128_t is already a typedef, so you can't add a signed or unsigned qualifier to it. std::make_signed_t<__int128_t> works because that doesn't just add the 'signed' keyword to it. The keyword for the type is __int128 not __int128_t, so you can say signed __int128 and unsigned __int128.