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.
Descriptions are provided in [rand.eng]
only for engine operations
that are not described in [rand.req.eng]
or for operations where there is additional semantic information.
In particular,
declarations for copy constructors,
for copy assignment operators,
for streaming operators,
and for equality and inequality operators
are not shown in the synopses.
if the constructor
template<class Sseq>explicit X(Sseq& q);
is called with a type Sseq that does not qualify as a seed sequence, then this
constructor shall not participate in overload resolution;
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.