https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104859
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I'm more suprised that this ever worked. For 32-bit libstdc++, there is no unsigned __int128 support, so it uses uint128_t.h instead, but that class doesn't have conversion operator to unsigned. Wonder if constexpr explicit operator unsigned() const { return unsigned(lo); } shouldn't be added to the header and then spots like const unsigned nibble = effective_mantissa >> rounded_mantissa_bits; be replaced with const unsigned nibble = {effective_mantissa >> rounded_mantissa_bits};