29.5 Random number generation [rand]
#include <initializer_list>     
namespace std {
  
  template<class G>
    concept uniform_random_bit_generator = see below;           
  
  template<class UIntType, UIntType a, UIntType c, UIntType m>
    class linear_congruential_engine;                           
  
  template<class UIntType, size_t w, size_t n, size_t m, size_t r,
           UIntType a, size_t u, UIntType d, size_t s,
           UIntType b, size_t t,
           UIntType c, size_t l, UIntType f>
    class mersenne_twister_engine;
  
  template<class UIntType, size_t w, size_t s, size_t r>
    class subtract_with_carry_engine;                           
  
  template<class Engine, size_t p, size_t r>
    class discard_block_engine;                                 
  
  template<class Engine, size_t w, class UIntType>
    class independent_bits_engine;                              
  
  template<class Engine, size_t k>
    class shuffle_order_engine;
  
  template<class UIntType, size_t w, size_t n, size_t r, UIntType... consts>
    class philox_engine;                                        
  
  using minstd_rand0  = see below;      
  using minstd_rand   = see below;      
  using mt19937       = see below;      
  using mt19937_64    = see below;      
  using ranlux24_base = see below;      
  using ranlux48_base = see below;      
  using ranlux24      = see below;      
  using ranlux48      = see below;      
  using knuth_b       = see below;
  using philox4x32    = see below;      
  using philox4x64    = see below;      
  using default_random_engine = see below;
  
  class random_device;
  
  class seed_seq;
  
  template<class RealType, size_t digits, class URBG>
    RealType generate_canonical(URBG& g);
  namespace ranges {
    
    template<class R, class G>
      requires output_range<R, invoke_result_t<G&>> &&
               uniform_random_bit_generator<remove_cvref_t<G>>
      constexpr borrowed_iterator_t<R> generate_random(R&& r, G&& g);
    template<class G, output_iterator<invoke_result_t<G&>> O, sentinel_for<O> S>
      requires uniform_random_bit_generator<remove_cvref_t<G>>
      constexpr O generate_random(O first, S last, G&& g);
    template<class R, class G, class D>
      requires output_range<R, invoke_result_t<D&, G&>> && invocable<D&, G&> &&
               uniform_random_bit_generator<remove_cvref_t<G>> &&
               is_arithmetic_v<invoke_result_t<D&, G&>>
    constexpr borrowed_iterator_t<R> generate_random(R&& r, G&& g, D&& d);
    template<class G, class D, output_iterator<invoke_result_t<D&, G&>> O, sentinel_for<O> S>
      requires invocable<D&, G&> && uniform_random_bit_generator<remove_cvref_t<G>> &&
               is_arithmetic_v<invoke_result_t<D&, G&>>
    constexpr O generate_random(O first, S last, G&& g, D&& d);
  }
  
  template<class IntType = int>
    class uniform_int_distribution;                             
  
  template<class RealType = double>
    class uniform_real_distribution;
  
  class bernoulli_distribution;
  
  template<class IntType = int>
    class binomial_distribution;
  
  template<class IntType = int>
    class geometric_distribution;
  
  template<class IntType = int>
    class negative_binomial_distribution;
  
  template<class IntType = int>
    class poisson_distribution;
  
  template<class RealType = double>
    class exponential_distribution;
  
  template<class RealType = double>
    class gamma_distribution;
  
  template<class RealType = double>
    class weibull_distribution;
  
  template<class RealType = double>
    class extreme_value_distribution;
  
  template<class RealType = double>
    class normal_distribution;
  
  template<class RealType = double>
    class lognormal_distribution;
  
  template<class RealType = double>
    class chi_squared_distribution;
  
  template<class RealType = double>
    class cauchy_distribution;
  
  template<class RealType = double>
    class fisher_f_distribution;
  
  template<class RealType = double>
    class student_t_distribution;
  
  template<class IntType = int>
    class discrete_distribution;
  
  template<class RealType = double>
    class piecewise_constant_distribution;
  
  template<class RealType = double>
    class piecewise_linear_distribution;
}