aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/ext/random
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2018-06-12 20:10:55 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2018-06-12 20:10:55 +0100
commitdd9db6f897cbe85f830a5606435afe51961dbda8 (patch)
tree569acda1ce35ce3401fadf07906c81347bc203df /libstdc++-v3/include/ext/random
parentb80a188beea98da44228d6030932af0769946f83 (diff)
downloadgcc-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/random98
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.
*/