On Mon, 5 Oct 2026 at 18:34, François Dumont <[email protected]> wrote: > > Much better indeed. > > Disabling C++11 extensions warning does not give access to 'nullptr' > keyword so I used value-initialization, I hope it is fine.
We generally just use '= 0' to initialize pointers in C++98 code. > > Maybe I should also use only 1 block of #pragma GCC diagnostic push/pop > so enclosing almost all header content within it ? If there were many uses of it then I'd say yes, but there are only two such blocks so this is OK. > > 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. > > Use value-initialization syntax when setting pointers to nullptr > instead of > using '= 0'. The commit log should mention that it's using C++11 features but disabling the warnings with pragmas. > > libstdc++-v3/ChangeLog: > > * include/debug/safe_base.h > (_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. > > Tested under Linux x86_64 _GLIBCXX_DEBUG mode C++98/C++20. > > Ok to commit ? > > François > > On 10/2/26 00:14, Jonathan Wakely wrote: > > On Thu, 1 Oct 2026 at 18:36, Jonathan Wakely <[email protected]> wrote: > >> On Thu, 1 Oct 2026 at 18:29, François Dumont <[email protected]> wrote: > >>> I'd like to commit this code cleanup. It is not fixing anything except > >>> perhaps for some code analysis tools reporting minor issues. > >> Does this really clean things up? Now there are two definitions for > >> most of those constructors. > >> > >> Maybe it's possible to just use the >= 201103 versions > >> unconditionally, and disable -Wc++11-extensions warnings? > > Yes, both GCC and Clang compile this without warnings using -std=c++98 > > > > #pragma GCC diagnostic push > > #pragma GCC diagnostic ignored "-Wc++11-extensions" > > template<class T> > > struct S > > { > > S() = default; > > S(const S&) = default; > > > > T i = 0; > > }; > > #pragma GCC diagnostic pop > > > > int main() > > { > > S<int> s; > > } > > > > So you can add those pragmas and then *really* clean up the code, by > > only keeping the versions with the defaulted constructors and the > > default member-initializers. > > > > > > > >> > >>> Despite being trivial and limited to _GLIBCCX_DEBUG I'd like to have > >>> some feedback at least on the ChangeLog, to make sure I've used the > >>> right C++ words. > >>> > >>> libstdc++: [_GLIBCXX_DEBUG] _Safe_iterator_base/_Safe_sequence_base > >>> code cleanup > >>> > >>> Use inlined initialization for both _Safe_iterator_base and > >>> _Safe_sequence_base and so default their default constructor. > >>> > >>> Have _Safe_sequence_base copy constructor always defined, using same > >>> implementation as the default constructor. > >>> > >>> Use value-initialization syntax when setting pointers to nullptr > >>> before C++11 > >>> instead of using 0. > >>> > >>> libstdc++-v3/ChangeLog: > >>> > >>> * include/debug/safe_base.h > >>> [__cplusplus >= 201103L] > >>> (_Safe_iterator_base::_M_sequence): Add inline > >>> initialization. > >> You've added a default member-initializer > >> > >>> (_Safe_iterator_base::_M_version): Likewise. > >>> (_Safe_iterator_base::_M_prior): Likewise. > >>> (_Safe_iterator_base::_M_next): Likewise. > >>> [__cplusplus < 201103L](_Safe_iterator_base()): Value > >>> initialize members. > >>> [__cplusplus >= 201103L](_Safe_iterator_base()): Default > >>> implementation. > >>> (_Safe_iterator_base(const _Safe_sequence_base*, bool)): > >>> Value initialize members. > >>> (_Safe_iterator_base(const _Safe_iterator_base&, bool)): > >>> Likewise. > >>> [__cplusplus >= 201103L] > >>> (_Safe_sequence_base::_M_iterators): Add inline > >>> initialization. > >>> (_Safe_sequence_base::_M_const_iterators): Likewise. > >>> (_Safe_sequence_base::_M_version): Likewise. > >>> [__cplusplus < 201103L](_Safe_sequence_base()): Value > >>> initialize members. > >>> [__cplusplus >= 201103L](_Safe_sequence_base()): Default > >>> implementation. > >>> [__cplusplus < 201103L](_Safe_sequence_base(const > >>> _Safe_sequence_base&)): New. > >>> > >>> Tested under Linux x86_64 C++98 and C++20 _GLIBCXX_DEBUG mode. > >>> > >>> Ok to commit ? > >>> > >>> François > >>>
