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 D constructed directly from the values used to construct p  | 
 Same as p's construction
 | |
d.reset()  | 
 void  | 
 Resets the internal state of the distribution. The next call to operator() on d will not depend on values produced by any engine prior to reset().  | 
constant | 
x.param()  | 
 P  | 
 Returns p such 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 g are randomly distributed according to the distribution parametrized by d.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 g are randomly distributed according to the distribution parametrized by p  | 
 Amortized constant number of invocations of g
 | 
x.min()  | 
 T  | 
 the greatest lower bound on the values potentially returned by x’s operator(), as determined by the current values of x’s parameters  | 
constant | 
x.max()  | 
 T  | 
 the least upper bound on the values potentially returned by x’s operator(), as determined by the current values of x’s parameters  | 
constant | 
x == y  | 
 bool  | 
 Establishes an equivalence relation. Returns true if 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 of os are unchanged.  | 
|
is >> d  | 
 Reference to the type of is  | 
 Restores the distribution parameters and internal state with data read from is. The formatting flags of is are unchanged. The data must have been written using a stream with the same locale, CharT and Traits stream 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. d is 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)  |