Every function described in [rand.eng]
that has a function parameter q of type Sseq&
for a template type parameter named Sseq
that is different from type seed_seq
throws what and when the invocation of q.generate throws.
if the member function
template<class Sseq>void seed(Sseq& q);
is called with a type Sseq that does not qualify as a seed sequence, then this
function shall not participate in overload resolution.
The extent to which an implementation determines that a type cannot be a seed sequence
is unspecified, except that as a minimum a type shall not qualify as a seed sequence
if it is implicitly convertible to X::result_type.
The following relations shall hold:
m <= n,
r <= w,
u <= w,
s <= w,
t <= w,
l <= w,
w <= numeric_limits<UIntType>::digits,
Effects: Sets the values of
in that order, as specified below.
If X−1 is then 0,
sets c to 1;
otherwise sets c to 0.
To set the values Xk,
first construct e, a linear_congruential_engine object,
as if by the following definition:
40014u,0u,2147483563u> e(value ==0u? default_seed : value);
Then, to set each Xk,
obtain new values z0,…,zn−1
from n=⌈w/32⌉ successive invocations