There is no required implementation for uniform_int_distribution<>
. [rand.dist.general] specifies that:
The algorithms for producing each of the specified distributions are implementation-defined.
All that [rand.dist.uni.int] states is:
A uniform_int_distribution random number distribution produces random integers
i
,a <= i <= b
, distributed
according to the constant discrete probability function
P(i | a, b) = 1/(b − a + 1)
.
Each implementation is free to achieve this distribution how it wishes. What you are seeing is apparently three different implementations.