26 Numerics library [numerics]

26.6 Random number generation [rand]

26.6.2 Requirements [rand.req]

26.6.2.3 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
:
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&>>;
    };
Let g be an object of type G.
G models uniform_­random_­bit_­generator only if
  • both G​::​min() and G​::​max() are constant expressions ([expr.const]),
  • G​::​min() < G​::​max(),
  • 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&>.