From 4d372a0626ac0b5b483b8447bdb5456b3bcfdd8f Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 13 Sep 2026 12:13:03 +0200 Subject: [PATCH 1/3] Fix deprecated-copy warnings in polynomial.hpp Explicitely delete the copy constructor as the implicit copy constructor for 'reference' is deprecated because it has a user-declared copy assignment operator --- include/boost/random/detail/polynomial.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/boost/random/detail/polynomial.hpp b/include/boost/random/detail/polynomial.hpp index a8c4b269f1..ee4a37dad4 100644 --- a/include/boost/random/detail/polynomial.hpp +++ b/include/boost/random/detail/polynomial.hpp @@ -300,6 +300,8 @@ class polynomial return *this; } + // Allow only copy assignment + reference(const reference&) = delete; reference &operator=(const reference &other) { return *this = static_cast(other); From 32fcd75b6a983f175b7d5c426e2b928a98b94d81 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 13 Sep 2026 12:17:08 +0200 Subject: [PATCH 2/3] Reorder reference member functions --- include/boost/random/detail/polynomial.hpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/include/boost/random/detail/polynomial.hpp b/include/boost/random/detail/polynomial.hpp index ee4a37dad4..9d05706384 100644 --- a/include/boost/random/detail/polynomial.hpp +++ b/include/boost/random/detail/polynomial.hpp @@ -284,7 +284,12 @@ class polynomial public: reference(digit_t &value, int idx) : _value(value), _idx(idx) {} - operator bool() const { return (_value & (digit_t(1) << _idx)) != 0; } + // Allow only copy assignment + reference(const reference&) = delete; + reference &operator=(const reference &other) + { + return *this = static_cast(other); + } reference& operator=(bool b) { if(b) { @@ -294,18 +299,14 @@ class polynomial } return *this; } + operator bool() const { return (_value & (digit_t(1) << _idx)) != 0; } + + reference &operator^=(bool b) { _value ^= (digit_t(b) << _idx); return *this; } - - // Allow only copy assignment - reference(const reference&) = delete; - reference &operator=(const reference &other) - { - return *this = static_cast(other); - } private: digit_t &_value; int _idx; @@ -341,7 +342,7 @@ class polynomial friend polynomial operator*(const polynomial &lhs, const polynomial &rhs); friend polynomial mod_pow_x(boost::uintmax_t exponent, polynomial mod); private: - std::vector _storage; + std::vector _storage; std::size_t _size; void ensure_bit(std::size_t i) { From c6e66c5d51f670ef7fdd33e34f2a9503071ace6b Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Sun, 13 Sep 2026 13:31:20 +0200 Subject: [PATCH 3/3] Default copy/move ctors We need to be able return `reference` --- include/boost/random/detail/polynomial.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/boost/random/detail/polynomial.hpp b/include/boost/random/detail/polynomial.hpp index 9d05706384..89f779a144 100644 --- a/include/boost/random/detail/polynomial.hpp +++ b/include/boost/random/detail/polynomial.hpp @@ -284,8 +284,8 @@ class polynomial public: reference(digit_t &value, int idx) : _value(value), _idx(idx) {} - // Allow only copy assignment - reference(const reference&) = delete; + reference(const reference& other) = default; + reference(reference&& other) = default; reference &operator=(const reference &other) { return *this = static_cast(other);