24 Numerics library [numerics]

24.7 Random number generation [rand]

24.7.2 Requirements [rand.req]

24.7.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 UniformRandomBitGenerator =
    Invocable<G&> && UnsignedIntegral<invoke_result_t<G&>> &&
    requires {
      G::min(); requires Same<decltype(G::min()), invoke_result_t<G&>>;
      G::max(); requires Same<decltype(G::max()), invoke_result_t<G&>>;
    };
Let g be an object of type G.
G models UniformRandomBitGenerator 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 UniformRandomBitGenerator, 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&>.