[rand.req.genl]

# 29 Numerics library [[numerics]](./#numerics)

## 29.5 Random number generation [[rand]](rand#req.genl)

### 29.5.3 Requirements [[rand.req]](rand.req#genl)

#### 29.5.3.1 General requirements [rand.req.genl]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/numerics.tex#L1557)

Throughout [[rand]](rand "29.5 Random number generation"),
the effect of instantiating a template:

- [(1.1)](#1.1)

  that has a template type parameter
 named Sseq is undefined unless the corresponding template argument
 is cv-unqualified and
 meets the requirements
 of [seed sequence](rand.req.seedseq "29.5.3.2 Seed sequence requirements [rand.req.seedseq]")[.](#1.1.sentence-1)

- [(1.2)](#1.2)

  that has a template type parameter
 named URBG is undefined unless the corresponding template argument
 is cv-unqualified and
 meets the requirements
 of [uniform random bit generator](rand.req.urng "29.5.3.3 Uniform random bit generator requirements [rand.req.urng]")[.](#1.2.sentence-1)

- [(1.3)](#1.3)

  that has a template type parameter
 named Engine is undefined unless the corresponding template argument
 is cv-unqualified and
 meets the requirements
 of [random number engine](rand.req.eng "29.5.3.4 Random number engine requirements [rand.req.eng]")[.](#1.3.sentence-1)

- [(1.4)](#1.4)

  that has a template type parameter
 named RealType is undefined unless the corresponding template argument
 is cv-unqualified and
 is one of float, double, or long double[.](#1.4.sentence-1)

- [(1.5)](#1.5)

  that has a template type parameter
 named IntType is undefined unless the corresponding template argument
 is cv-unqualified and
 is one of short, int, long, long long, unsigned short, unsigned int, unsigned long,
 or unsigned long long[.](#1.5.sentence-1)

- [(1.6)](#1.6)

  that has a template type parameter
 named UIntType is undefined unless the corresponding template argument
 is cv-unqualified and
 is one of unsigned short, unsigned int, unsigned long,
 or unsigned long long[.](#1.6.sentence-1)

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/numerics.tex#L1617)

Throughout [[rand]](rand "29.5 Random number generation"),
phrases of the form âx is an iterator of a specific kindâ
shall be interpreted as equivalent to the more formal requirement that
âx is a value
of a type meeting the requirements
of the specified iterator typeâ[.](#2.sentence-1)

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/numerics.tex#L1625)

Throughout [[rand]](rand "29.5 Random number generation"),
any constructor that can be called with a single argument
and that meets a requirement specified in this subclause
shall be declared explicit[.](#3.sentence-1)
