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

: *end note*

]The degree to which g's results
approximate the ideal
is often determined statistically.

— template<class G> concept UniformRandomBitGenerator = Invocable<G&> && UnsignedIntegral<invoke_result_t<G&>> && requires { { G::min() } -> Same<invoke_result_t<G&>>; { G::max() } -> Same<invoke_result_t<G&>>; };

G models
UniformRandomBitGenerator only if

- 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&>.