https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97311
Bug ID: 97311 Summary: Bug in std::seed_seq::generate() when integer type has more than 32 bits Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: kristian.spangsege at gmail dot com Target Milestone: --- As far as I can tell, std::seed_seq::generate() has a bug when _Type has more than 32 bits. The problem is that the following two additions can produce values greater than, or equal to 2**32: __begin[(__k + __p) % __n] += __r1; __begin[(__k + __q) % __n] += __r2; According to C++17 standard text, all operations must be performed modulo 2**32, so no generated value can be greater than, or equal to 2**32. It seems that a possible fix would be to change those two lines to something like this: __begin[(__k + __p) % __n] = __detail::__mod<_Type, __detail::_Shift<_Type, 32>::__value>(__begin[(__k + __p) % __n] + __r1)); __begin[(__k + __q) % __n] = __detail::__mod<_Type, __detail::_Shift<_Type, 32>::__value>(__begin[(__k + __q) % __n] + __r2));