https://gcc.gnu.org/g:302af96357ff5e3a660e9441166e8c1f1966f45a
commit r17-4948-g302af96357ff5e3a660e9441166e8c1f1966f45a Author: François Dumont <[email protected]> Date: Sun Sep 27 14:53:17 2026 +0200 libstdc++: [_GLIBCXX_DEBUG] _Safe_iterator_base/_Safe_sequence_base code cleanup Use default member-initializer for both _Safe_iterator_base and _Safe_sequence_base and so default their default constructor. Have _Safe_sequence_base copy constructor always defined, forwarding to the default constructor. libstdc++-v3/ChangeLog: * include/debug/safe_base.h: Add #pragma GCC diagnostic to suppress C++11 extensions warnings. (_Safe_iterator_base::_M_sequence): Add default member-initializer. (_Safe_iterator_base::_M_version): Likewise. (_Safe_iterator_base::_M_prior): Likewise. (_Safe_iterator_base::_M_next): Likewise. (_Safe_iterator_base()): Default implementation. (_Safe_iterator_base(const _Safe_sequence_base*, bool)): Forward to default constructor. (_Safe_iterator_base(const _Safe_iterator_base&, bool)): Likewise. (_Safe_sequence_base::_M_iterators): Add default member-initializer. (_Safe_sequence_base::_M_const_iterators): Likewise. (_Safe_sequence_base::_M_version): Likewise. (_Safe_sequence_base()): Default implementation. (_Safe_sequence_base(const _Safe_sequence_base&)): Forward to default constructor. Diff: --- libstdc++-v3/include/debug/safe_base.h | 36 ++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/libstdc++-v3/include/debug/safe_base.h b/libstdc++-v3/include/debug/safe_base.h index 6ea499ef2395..776b86ee701a 100644 --- a/libstdc++-v3/include/debug/safe_base.h +++ b/libstdc++-v3/include/debug/safe_base.h @@ -51,12 +51,14 @@ namespace __gnu_debug { friend class _Safe_sequence_base; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" public: /** The sequence this iterator references; may be NULL to indicate * a singular iterator. Stored as pointer-to-const because sequence * could be declared as const. */ - const _Safe_sequence_base* _M_sequence; + const _Safe_sequence_base* _M_sequence = 0; /** The version number of this iterator. The sentinel value 0 is * used to indicate an invalidated iterator (i.e., one that is @@ -65,22 +67,20 @@ namespace __gnu_debug * referenced by _M_sequence for the iterator to be * non-singular. */ - unsigned int _M_version; + unsigned int _M_version = 0; /** Pointer to the previous iterator in the sequence's list of iterators. Only valid when _M_sequence != NULL. */ - _Safe_iterator_base* _M_prior; + _Safe_iterator_base* _M_prior = 0; /** Pointer to the next iterator in the sequence's list of iterators. Only valid when _M_sequence != NULL. */ - _Safe_iterator_base* _M_next; + _Safe_iterator_base* _M_next = 0; protected: /** Initializes the iterator and makes it singular. */ _GLIBCXX20_CONSTEXPR - _Safe_iterator_base() - : _M_sequence(0), _M_version(0), _M_prior(0), _M_next(0) - { } + _Safe_iterator_base() = default; /** Initialize the iterator to reference the sequence pointed to * by @p __seq. @p __constant is true when we are initializing a @@ -91,7 +91,7 @@ namespace __gnu_debug */ _GLIBCXX20_CONSTEXPR _Safe_iterator_base(const _Safe_sequence_base* __seq, bool __constant) - : _M_sequence(0), _M_version(0), _M_prior(0), _M_next(0) + : _Safe_iterator_base() { if (!std::__is_constant_evaluated()) this->_M_attach(__seq, __constant); @@ -102,11 +102,12 @@ namespace __gnu_debug iterator, and false if it is mutable. */ _GLIBCXX20_CONSTEXPR _Safe_iterator_base(const _Safe_iterator_base& __x, bool __constant) - : _M_sequence(0), _M_version(0), _M_prior(0), _M_next(0) + : _Safe_iterator_base() { if (!std::__is_constant_evaluated()) this->_M_attach(__x._M_sequence, __constant); } +#pragma GCC diagnostic pop _GLIBCXX20_CONSTEXPR ~_Safe_iterator_base() @@ -219,28 +220,29 @@ namespace __gnu_debug { friend class _Safe_iterator_base; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wc++11-extensions" public: /// The list of mutable iterators that reference this container - mutable _Safe_iterator_base* _M_iterators; + mutable _Safe_iterator_base* _M_iterators = 0; /// The list of constant iterators that reference this container - mutable _Safe_iterator_base* _M_const_iterators; + mutable _Safe_iterator_base* _M_const_iterators = 0; /// The container version number. This number may never be 0. - mutable unsigned int _M_version; + mutable unsigned int _M_version = 1; protected: // Initialize with a version number of 1 and no iterators _GLIBCXX20_CONSTEXPR - _Safe_sequence_base() _GLIBCXX_NOEXCEPT - : _M_iterators(0), _M_const_iterators(0), _M_version(1) - { } + _Safe_sequence_base() = default; -#if __cplusplus >= 201103L _GLIBCXX20_CONSTEXPR - _Safe_sequence_base(const _Safe_sequence_base&) noexcept + _Safe_sequence_base(const _Safe_sequence_base&) _GLIBCXX_NOEXCEPT : _Safe_sequence_base() { } +#pragma GCC diagnostic pop +#if __cplusplus >= 201103L // Move constructor swap iterators. _GLIBCXX20_CONSTEXPR _Safe_sequence_base(_Safe_sequence_base&& __seq) noexcept
