https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87744
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Jonathan Wakely from comment #1) > Created attachment 57345 [details] > Use 64-bit integers to do 128-bit arithmetic > > This patch defines a custom type that implements the necessary 128-bit > arithmetic for linear_congruential_engine<uint64_t, ...> without __int128. > > It's an order of magnitude slower than using __int128 natively on x86_64, > but it gives the right results. if (__builtin_uaddll_overflow(__l._M_lo, __c, &__l._M_lo)) __l._M_hi++; Why not just __l._M_hi += __builtin_uaddll_overflow(__l._M_lo, __c, &__l._M_lo); and similarly for subtraction? Is the reason for using the clang compat builtins instead of __builtin_{add,sub,mul}_overflow the compatibility with clang versions which don't support these?