[libcxx-commits] [libcxx] [libc++] Avoid overloaded `operator, ` for `piecewise_*_distribution` (PR #161049)
A. Jiang via libcxx-commits
libcxx-commits at lists.llvm.org
Sat Sep 27 23:06:15 PDT 2025
https://github.com/frederick-vs-ja created https://github.com/llvm/llvm-project/pull/161049
Existing deleted overloads in `test_iterators.h` are insufficient for the (`size_t`, `Iter`) case. This PR only adds one non-member overload for `cpp17_input_iterator` because it is only adaptor used for tests. Overloads for other iterators may be added in one or more later PRs.
Fixes #160732.
>From 921abbf1a007f4d1f558d06ad6d55aa7bd3a13c7 Mon Sep 17 00:00:00 2001
From: "A. Jiang" <de34 at live.cn>
Date: Sun, 28 Sep 2025 14:02:52 +0800
Subject: [PATCH] [libc++] Avoid overloaded `operator,` for
`piecewise_*_distribution`
Existing deleted overloads in `test_iterators.h` are insufficient for
the (`size_t`, `Iter`) case. This PR only adds one non-member overload
for `cpp17_input_iterator` because it is only adaptor used for tests.
Overloads for other iterators may be added in one or more later PRs.
---
libcxx/include/__random/piecewise_constant_distribution.h | 2 +-
libcxx/include/__random/piecewise_linear_distribution.h | 2 +-
.../rand.dist.samp.pconst/ctor_iterator.pass.cpp | 4 +++-
.../rand.dist.samp.pconst/param_ctor_iterator.pass.cpp | 4 +++-
.../rand.dist.samp.plinear/ctor_iterator.pass.cpp | 4 +++-
.../rand.dist.samp.plinear/param_ctor_iterator.pass.cpp | 4 +++-
libcxx/test/support/test_iterators.h | 3 +++
7 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/libcxx/include/__random/piecewise_constant_distribution.h b/libcxx/include/__random/piecewise_constant_distribution.h
index c5bfa8dc3a4be..bd624fffd7f0e 100644
--- a/libcxx/include/__random/piecewise_constant_distribution.h
+++ b/libcxx/include/__random/piecewise_constant_distribution.h
@@ -190,7 +190,7 @@ piecewise_constant_distribution<_RealType>::param_type::param_type(
__areas_.assign(1, 0.0);
} else {
__densities_.reserve(__b_.size() - 1);
- for (size_t __i = 0; __i < __b_.size() - 1; ++__i, ++__f_w)
+ for (size_t __i = 0; __i < __b_.size() - 1; ++__i, (void)++__f_w)
__densities_.push_back(*__f_w);
__init();
}
diff --git a/libcxx/include/__random/piecewise_linear_distribution.h b/libcxx/include/__random/piecewise_linear_distribution.h
index a9906430c005c..1ceef77c8716b 100644
--- a/libcxx/include/__random/piecewise_linear_distribution.h
+++ b/libcxx/include/__random/piecewise_linear_distribution.h
@@ -194,7 +194,7 @@ piecewise_linear_distribution<_RealType>::param_type::param_type(
__areas_.assign(1, 0.0);
} else {
__densities_.reserve(__b_.size());
- for (size_t __i = 0; __i < __b_.size(); ++__i, ++__f_w)
+ for (size_t __i = 0; __i < __b_.size(); ++__i, (void)++__f_w)
__densities_.push_back(*__f_w);
__init();
}
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/ctor_iterator.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/ctor_iterator.pass.cpp
index ea6e807ca47b5..46decd7d974ee 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/ctor_iterator.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/ctor_iterator.pass.cpp
@@ -21,15 +21,17 @@
#include <cassert>
#include <vector>
+#include "test_iterators.h"
#include "test_macros.h"
int main(int, char**)
{
{
typedef std::piecewise_constant_distribution<> D;
+ typedef cpp17_input_iterator<const double*> InIt;
double b[] = {10};
double p[] = {12};
- D d(b, b, p);
+ D d(InIt(b), InIt(b), InIt(p));
std::vector<double> iv = d.intervals();
assert(iv.size() == 2);
assert(iv[0] == 0);
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/param_ctor_iterator.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/param_ctor_iterator.pass.cpp
index baf6108b7e2e8..8cb42391925a7 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/param_ctor_iterator.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/param_ctor_iterator.pass.cpp
@@ -20,6 +20,7 @@
#include <cassert>
#include <vector>
+#include "test_iterators.h"
#include "test_macros.h"
int main(int, char**)
@@ -27,9 +28,10 @@ int main(int, char**)
{
typedef std::piecewise_constant_distribution<> D;
typedef D::param_type P;
+ typedef cpp17_input_iterator<const double*> InIt;
double b[] = {10};
double p[] = {12};
- P pa(b, b, p);
+ P pa(InIt(b), InIt(b), InIt(p));
std::vector<double> iv = pa.intervals();
assert(iv.size() == 2);
assert(iv[0] == 0);
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/ctor_iterator.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/ctor_iterator.pass.cpp
index 24f7d4e18c36a..084538dfb5156 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/ctor_iterator.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/ctor_iterator.pass.cpp
@@ -21,15 +21,17 @@
#include <cassert>
#include <vector>
+#include "test_iterators.h"
#include "test_macros.h"
int main(int, char**)
{
{
typedef std::piecewise_linear_distribution<> D;
+ typedef cpp17_input_iterator<const double*> InIt;
double b[] = {10};
double p[] = {12};
- D d(b, b, p);
+ D d(InIt(b), InIt(b), InIt(p));
std::vector<double> iv = d.intervals();
assert(iv.size() == 2);
assert(iv[0] == 0);
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/param_ctor_iterator.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/param_ctor_iterator.pass.cpp
index 04ded2a1c9706..42754456e0d6d 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/param_ctor_iterator.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.plinear/param_ctor_iterator.pass.cpp
@@ -20,6 +20,7 @@
#include <cassert>
#include <vector>
+#include "test_iterators.h"
#include "test_macros.h"
int main(int, char**)
@@ -27,9 +28,10 @@ int main(int, char**)
{
typedef std::piecewise_linear_distribution<> D;
typedef D::param_type P;
+ typedef cpp17_input_iterator<const double*> InIt;
double b[] = {10};
double p[] = {12};
- P pa(b, b, p);
+ P pa(InIt(b), InIt(b), InIt(p));
std::vector<double> iv = pa.intervals();
assert(iv.size() == 2);
assert(iv[0] == 0);
diff --git a/libcxx/test/support/test_iterators.h b/libcxx/test/support/test_iterators.h
index 0335a4c561017..006b27c10b3f0 100644
--- a/libcxx/test/support/test_iterators.h
+++ b/libcxx/test/support/test_iterators.h
@@ -109,6 +109,9 @@ class cpp17_input_iterator
template <class T>
void operator,(T const &) = delete;
+
+ template <class T>
+ friend void operator,(const T&, const cpp17_input_iterator&) = delete;
};
#if TEST_STD_VER > 14
template <class It>
More information about the libcxx-commits
mailing list