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;
}