diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2018-06-12 20:10:55 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2018-06-12 20:10:55 +0100 |
commit | dd9db6f897cbe85f830a5606435afe51961dbda8 (patch) | |
tree | 569acda1ce35ce3401fadf07906c81347bc203df /libstdc++-v3/include/ext/random | |
parent | b80a188beea98da44228d6030932af0769946f83 (diff) | |
download | gcc-dd9db6f897cbe85f830a5606435afe51961dbda8.zip gcc-dd9db6f897cbe85f830a5606435afe51961dbda8.tar.gz gcc-dd9db6f897cbe85f830a5606435afe51961dbda8.tar.bz2 |
P0935R0 Eradicating unnecessarily explicit default constructors
Explicit default constructors are problematic, so this change removes
them from <random> and <ext/random>, as per P0935R0.
* include/bits/random.h (linear_congruential_engine)
(mersenne_twister_engine, subtract_with_carry_engine, random_device)
(uniform_real_distribution, normal_distribution)
(lognormal_distribution, gamma_distribution, chi_squared_distribution)
(cauchy_distribution, fisher_f_distribution, student_t_distribution)
(bernoulli_distribution, binomial_distribution,geometric_distribution)
(negative_binomial_distribution, exponential_distribution)
(weibull_distribution, extreme_value_distribution): Add non-explicit
default constructors. Remove default argument for first parameter of
explicit constructors.
(piecewise_constant_distribution, piecewise_linear_distribution):
Make default constructor non-explicit.
* include/bits/uniform_int_dist.h (uniform_int_distribution): Add
non-explicit default constructors. Remove default argument for first
parameter of explicit constructor.
(simd_fast_mersenne_twister_engine, beta_distribution)
(rice_distribution, nakagami_distribution, pareto_distribution)
(k_distribution, arcsine_distribution, hoyt_distribution)
(triangular_distribution, von_mises_distribution)
(hypergeometric_distribution, logistic_distribution)
(uniform_inside_sphere_distribution): Likewise.
(uniform_on_sphere_distribution): Make default constructor
non-explicit.
* testsuite/26_numerics/random/bernoulli_distribution/cons/default.cc:
Test for non-explicit default constructor. Fix references to standard.
* testsuite/26_numerics/random/binomial_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/cauchy_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/chi_squared_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/discrete_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/exponential_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/extreme_value_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/fisher_f_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/gamma_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/geometric_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/lognormal_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/negative_binomial_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/normal_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/piecewise_constant_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/piecewise_linear_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/poisson_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/student_t_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/uniform_int_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/uniform_real_distribution/cons/default.cc:
Likewise.
* testsuite/26_numerics/random/weibull_distribution/cons/default.cc:
Likewise.
* testsuite/ext/random/arcsine_distribution/cons/default.cc: Likewise.
* testsuite/ext/random/beta_distribution/cons/default.cc: Likewise.
* testsuite/ext/random/hoyt_distribution/cons/default.cc: Likewise.
* testsuite/ext/random/hypergeometric_distribution/cons/default.cc:
Likewise.
* testsuite/ext/random/k_distribution/cons/default.cc: Likewise.
* testsuite/ext/random/logistic_distribution/cons/default.cc: Likewise.
* testsuite/ext/random/nakagami_distribution/cons/default.cc: Likewise.
* testsuite/ext/random/normal_mv_distribution/cons/default.cc:
Likewise.
* testsuite/ext/random/pareto_distribution/cons/default.cc: Likewise.
* testsuite/ext/random/rice_distribution/cons/default.cc: Likewise.
* testsuite/ext/random/triangular_distribution/cons/default.cc:
Likewise.
* testsuite/ext/random/uniform_inside_sphere_distribution/cons/default.cc:
Likewise.
* testsuite/ext/random/uniform_on_sphere_distribution/cons/default.cc:
Likewise.
* testsuite/ext/random/von_mises_distribution/cons/default.cc:
Likewise.
* testsuite/util/testsuite_common_types.h
(implicitly_default_constructible): New helper.
From-SVN: r261522
Diffstat (limited to 'libstdc++-v3/include/ext/random')
-rw-r--r-- | libstdc++-v3/include/ext/random | 98 |
1 files changed, 78 insertions, 20 deletions
diff --git a/libstdc++-v3/include/ext/random b/libstdc++-v3/include/ext/random index 7e93186..3c714f5 100644 --- a/libstdc++-v3/include/ext/random +++ b/libstdc++-v3/include/ext/random @@ -96,9 +96,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION / sizeof(result_type)); static constexpr result_type default_seed = 5489u; - // constructors and member function + // constructors and member functions + + simd_fast_mersenne_twister_engine() + : simd_fast_mersenne_twister_engine(default_seed) + { } + explicit - simd_fast_mersenne_twister_engine(result_type __sd = default_seed) + simd_fast_mersenne_twister_engine(result_type __sd) { seed(__sd); } template<typename _Sseq, typename = _If_seed_seq<_Sseq>> @@ -454,12 +459,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION }; public: + beta_distribution() : beta_distribution(1.0) { } + /** * @brief Constructs a beta distribution with parameters * @f$\alpha@f$ and @f$\beta@f$. */ explicit - beta_distribution(_RealType __alpha_val = _RealType(1), + beta_distribution(_RealType __alpha_val, _RealType __beta_val = _RealType(1)) : _M_param(__alpha_val, __beta_val) { } @@ -998,9 +1005,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /** * @brief Constructors. + * @{ */ + + rice_distribution() : rice_distribution(0) { } + explicit - rice_distribution(result_type __nu_val = result_type(0), + rice_distribution(result_type __nu_val, result_type __sigma_val = result_type(1)) : _M_param(__nu_val, __sigma_val), _M_ndx(__nu_val, __sigma_val), @@ -1014,6 +1025,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_ndy(result_type(0), __p.sigma()) { } + // @} + /** * @brief Resets the distribution state. */ @@ -1244,9 +1257,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /** * @brief Constructors. + * @{ */ + + nakagami_distribution() : nakagami_distribution(1) { } + explicit - nakagami_distribution(result_type __mu_val = result_type(1), + nakagami_distribution(result_type __mu_val, result_type __omega_val = result_type(1)) : _M_param(__mu_val, __omega_val), _M_gd(__mu_val, __omega_val / __mu_val) @@ -1258,6 +1275,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_gd(__p.mu(), __p.omega() / __p.mu()) { } + // @} + /** * @brief Resets the distribution state. */ @@ -1481,9 +1500,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /** * @brief Constructors. + * @{ */ + + pareto_distribution() : pareto_distribution(1) { } + explicit - pareto_distribution(result_type __alpha_val = result_type(1), + pareto_distribution(result_type __alpha_val, result_type __mu_val = result_type(1)) : _M_param(__alpha_val, __mu_val), _M_ud() @@ -1495,6 +1518,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_ud() { } + // @} + /** * @brief Resets the distribution state. */ @@ -1731,9 +1756,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /** * @brief Constructors. + * @{ */ + + k_distribution() : k_distribution(1) { } + explicit - k_distribution(result_type __lambda_val = result_type(1), + k_distribution(result_type __lambda_val, result_type __mu_val = result_type(1), result_type __nu_val = result_type(1)) : _M_param(__lambda_val, __mu_val, __nu_val), @@ -1748,6 +1777,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_gd2(__p.nu(), __p.mu() / __p.nu()) { } + // @} + /** * @brief Resets the distribution state. */ @@ -1965,10 +1996,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /** * @brief Constructors. + * :{ */ + + arcsine_distribution() : arcsine_distribution(0) { } + explicit - arcsine_distribution(result_type __a = result_type(0), - result_type __b = result_type(1)) + arcsine_distribution(result_type __a, result_type __b = result_type(1)) : _M_param(__a, __b), _M_ud(-1.5707963267948966192313216916397514L, +1.5707963267948966192313216916397514L) @@ -1981,6 +2015,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION +1.5707963267948966192313216916397514L) { } + // @} + /** * @brief Resets the distribution state. */ @@ -2207,10 +2243,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /** * @brief Constructors. + * @{ */ + + hoyt_distribution() : hoyt_distribution(0.5) { } + explicit - hoyt_distribution(result_type __q = result_type(0.5L), - result_type __omega = result_type(1)) + hoyt_distribution(result_type __q, result_type __omega = result_type(1)) : _M_param(__q, __omega), _M_ad(result_type(0.5L) * (result_type(1) + __q * __q), result_type(0.5L) * (result_type(1) + __q * __q) @@ -2459,12 +2498,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _RealType _M_f_bc_ac; }; + triangular_distribution() : triangular_distribution(0.0) { } + /** * @brief Constructs a triangle distribution with parameters * @f$ a @f$, @f$ b @f$ and @f$ c @f$. */ explicit - triangular_distribution(result_type __a = result_type(0), + triangular_distribution(result_type __a, result_type __b = result_type(0.5), result_type __c = result_type(1)) : _M_param(__a, __b, __c) @@ -2668,6 +2709,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION public: /** The type of the range of the distribution. */ typedef _RealType result_type; + /** Parameter type. */ struct param_type { @@ -2711,14 +2753,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _RealType _M_r; }; + von_mises_distribution() : von_mises_distribution(0.0) { } + /** * @brief Constructs a von Mises distribution with parameters * @f$\mu@f$ and @f$\kappa@f$. */ explicit - von_mises_distribution(result_type __mu = result_type(0), + von_mises_distribution(result_type __mu, result_type __kappa = result_type(1)) - : _M_param(__mu, __kappa) + : _M_param(__mu, __kappa) { } explicit @@ -2956,9 +3000,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION result_type _M_n; }; - // constructors and member function + // constructors and member functions + + hypergeometric_distribution() : hypergeometric_distribution(10) { } + explicit - hypergeometric_distribution(result_type __N = 10, result_type __K = 5, + hypergeometric_distribution(result_type __N, result_type __K = 5, result_type __n = 1) : _M_param{__N, __K, __n} { } @@ -3209,10 +3256,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /** * @brief Constructors. + * @{ */ + logistic_distribution() : logistic_distribution(0.0) { } + explicit - logistic_distribution(result_type __a = result_type(0), - result_type __b = result_type(1)) + logistic_distribution(result_type __a, result_type __b = result_type(1)) : _M_param(__a, __b) { } @@ -3221,6 +3270,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : _M_param(__p) { } + // @} + /** * @brief Resets the distribution state. */ @@ -3401,7 +3452,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /** * @brief Constructs a uniform on sphere distribution. */ - explicit uniform_on_sphere_distribution() : _M_param(), _M_nd() { } @@ -3609,9 +3659,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION /** * @brief Constructors. + * @{ */ + + uniform_inside_sphere_distribution() + : uniform_inside_sphere_distribution(1.0) + { } + explicit - uniform_inside_sphere_distribution(_RealType __radius = _RealType(1)) + uniform_inside_sphere_distribution(_RealType __radius) : _M_param(__radius), _M_uosd() { } @@ -3620,6 +3676,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : _M_param(__p), _M_uosd() { } + // @} + /** * @brief Resets the distribution state. */ |