26 Numerics library [numerics]

26.6 Random number generation [rand]

26.6.3 Requirements [rand.req] Uniform random bit generator requirements [rand.req.urng]

A uniform random bit generator g of type G is a function object returning unsigned integer values such that each value in the range of possible results has (ideally) equal probability of being returned.
[Note 1:
The degree to which g's results approximate the ideal is often determined statistically.
— end note]
template<class G> concept uniform_­random_­bit_­generator = invocable<G&> && unsigned_­integral<invoke_result_t<G&>> && requires { { G::min() } -> same_­as<invoke_result_t<G&>>; { G::max() } -> same_­as<invoke_result_t<G&>>; requires bool_constant<(G::min() < G::max())>::value; };
Let g be an object of type G.
G models uniform_­random_­bit_­generator only if
  • G​::​min() <= g(),
  • g() <= G​::​max(), and
  • g() has amortized constant complexity.
A class G meets the uniform random bit generator requirements if G models uniform_­random_­bit_­generator, invoke_­result_­t<G&> is an unsigned integer type ([basic.fundamental]), and G provides a nested typedef-name result_­type that denotes the same type as invoke_­result_­t<G&>.