https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88935
--- Comment #9 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Xi Ruoyao from comment #7) > The C++11 standard explicitly allows to use rand() as the random source for > random_shuffle, thus this is not a bug but an enhancement. It doesn't just allow it, it requires it. But the standard also requires a uniform distribution, and we fail to meet that requirement because of the range of RAND_MAX. (We actually fail to meet it on all targets, because we use % which is not uniformly distributed unless RAND_MAX is an exact multiple of (last - first), so we always have a bias.) The proposed patch still uses rand() as the source of randomness, it just uses that source as input to another level of pseudo-randomness. That is conforming to the C++11 standard. Using std::shuffle isn't possible in C++98 code. Using the other overload of std::random_shuffle is possible though, and that allows you to provide a PRNG that returns values greater than RAND_MAX. Please don't close this bug, that serves no purpose. It's a bug and should be fixed.