C++ named requirements: RandomNumberDistribution
From cppreference.com
                    
                                        
                    
                    
                                                            
                    A RandomNumberDistribution is a function object returning random numbers according to a probability density function p(x) or a discrete probability distribution P(x
i).
Requirements
The type D satisfies RandomNumberDistribution if
-  Dsatisfies CopyConstructible
-  Dsatisfies CopyAssignable
Given
-  T, the type named by D::result_type
-  P, the type named by D::param_type, which
- satisfies CopyConstructible
- satisfies CopyAssignable
- satisfies EqualityComparable
-  has a constructor taking identical arguments as each of the constructors of Dthat take arguments corresponding to the distribution parameters.
-  has a member function with the identical name, type, and semantics, as every member function of Dthat returns a parameter of the distribution
- declares a member typedef using distribution_type = D;
 
-  d, a value of typeD
-  xandy, (possibly const) values of typeD
-  p, a (possibly const) value of typeP
-  g,g1,g2, lvalues of a type satisfying UniformRandomBitGenerator
-  os, lvalue of a specialization of std::basic_ostream
-  is, lvalue of a specialization of std::basic_istream
The following expressions must be valid and have their specified effects
| Expression | Type | Notes | Complexity | 
|---|---|---|---|
| D::result_type | T | An arithmetic type | compile-time | 
| D::param_type | P | compile-time | |
| D() | creates a distribution indistinguishable from any other default-constructed D | constant | |
| D(p) | creates a distribution indistinguishable from Dconstructed directly from the values used to constructp | Same as p's construction | |
| d.reset() | void | Resets the internal state of the distribution. The next call to operator()ondwill not depend on values produced by any engine prior toreset(). | constant | 
| x.param() | P | Returns psuch that D(p).param() == p | No worse than D(p) | 
| d.param(p) | void | Postcondition: d.param() == p | No worse than D(p) | 
| d(g) | T | The sequence of numbers returned by successive invocations of this call with the same gare randomly distributed according to the distribution parametrized byd.param() | Amortized constant number of invocations of g | 
| d(g,p) | T | The sequence of numbers returned by successive invocations of this call with the same gare randomly distributed according to the distribution parametrized byp | Amortized constant number of invocations of g | 
| x.min() | T | the greatest lower bound on the values potentially returned by x’soperator(), as determined by the current values ofx’s parameters | constant | 
| x.max() | T | the least upper bound on the values potentially returned by x’soperator(), as determined by the current values ofx’s parameters | constant | 
| x == y | bool | Establishes an equivalence relation. Returns trueif x.param() == y.param() and future infinite sequences of values that would be generated by repeated invocations of x(g1) and y(g2) would be equal as long as g1 == g2. | constant | 
| x != y | bool | !(x == y) | constant | 
| os << x | Reference to the type of os | Writes a textual representation of the distribution parameters and internal state to os. The formatting flags and fill character ofosare unchanged. | |
| is >> d | Reference to the type of is | Restores the distribution parameters and internal state with data read from is. The formatting flags ofisare unchanged. The data must have been written using a stream with the same locale,CharTandTraitsstream template parameters, otherwise the behavior is undefined. If bad input is encountered, is.setstate(std::ios::failbit) is called, which may throw std::ios_base::failure.dis unchanged in that case. | 
Notes
The parameters of a distribution object may be changed either permanently, by using d.param(p) or just for the duration of a single operator() call, by using d(g,p).
Calls to const member functions of the distribution and os << d do not affect the sequence of numbers produced by repeated d(g).
Standard library
The following standard library components satisfy RandomNumberDistribution
| (C++11) | produces integer values evenly distributed across a range (class template) | 
| (C++11) | produces real values evenly distributed across a range (class template) | 
| (C++11) | produces bool values on a  Bernoulli distribution. (class) | 
| (C++11) | produces integer values on a   binomial distribution. (class template) | 
| produces integer values on a   negative binomial distribution. (class template) | |
| (C++11) | produces integer values on a   geometric distribution. (class template) | 
| (C++11) | produces integer values on a   poisson distribution. (class template) | 
| (C++11) | produces real values on an   exponential distribution. (class template) | 
| (C++11) | produces real values on an   gamma distribution. (class template) | 
| (C++11) | produces real values on a   Weibull distribution. (class template) | 
| (C++11) | produces real values on an   extreme value distribution. (class template) | 
| (C++11) | produces real values on a   standard normal (Gaussian) distribution. (class template) | 
| (C++11) | produces real values on a   lognormal distribution. (class template) | 
| (C++11) | produces real values on a   chi-squared distribution. (class template) | 
| (C++11) | produces real values on a   Cauchy distribution. (class template) | 
| (C++11) | produces real values on a   Fisher's F-distribution. (class template) | 
| (C++11) | produces real values on a   Student's t-distribution. (class template) | 
| (C++11) | produces random integers on a discrete distribution. (class template) | 
| produces real values distributed on constant subintervals. (class template) | |
| produces real values distributed on defined subintervals. (class template) |