We can just use the injected-class-name instead of defining a new name.
That seems simpler.

libstdc++-v3/ChangeLog:

        * include/bits/stl_list.h (_List_iterator): Remove _Self typedef
        and just use injected-class-name instead.
        (_List_const_iterator): Likewise.
---

Tested x86_64-linux.

Pull request at https://forge.sourceware.org/gcc/gcc-TEST/pulls/25

 libstdc++-v3/include/bits/stl_list.h | 40 +++++++++++++++-------------
 1 file changed, 21 insertions(+), 19 deletions(-)

diff --git a/libstdc++-v3/include/bits/stl_list.h 
b/libstdc++-v3/include/bits/stl_list.h
index d51fde90e2b..b1ab335ba4c 100644
--- a/libstdc++-v3/include/bits/stl_list.h
+++ b/libstdc++-v3/include/bits/stl_list.h
@@ -254,7 +254,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
   template<typename _Tp>
     struct _List_iterator
     {
-      typedef _List_iterator<_Tp>              _Self;
       typedef _List_node<_Tp>                  _Node;
 
       typedef ptrdiff_t                                difference_type;
@@ -270,7 +269,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       _List_iterator(__detail::_List_node_base* __x) _GLIBCXX_NOEXCEPT
       : _M_node(__x) { }
 
-      _Self
+      _List_iterator
       _M_const_cast() const _GLIBCXX_NOEXCEPT
       { return *this; }
 
@@ -285,45 +284,47 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       operator->() const _GLIBCXX_NOEXCEPT
       { return static_cast<_Node*>(_M_node)->_M_valptr(); }
 
-      _Self&
+      _List_iterator&
       operator++() _GLIBCXX_NOEXCEPT
       {
        _M_node = _M_node->_M_next;
        return *this;
       }
 
-      _Self
+      _List_iterator
       operator++(int) _GLIBCXX_NOEXCEPT
       {
-       _Self __tmp = *this;
+       _List_iterator __tmp = *this;
        _M_node = _M_node->_M_next;
        return __tmp;
       }
 
-      _Self&
+      _List_iterator&
       operator--() _GLIBCXX_NOEXCEPT
       {
        _M_node = _M_node->_M_prev;
        return *this;
       }
 
-      _Self
+      _List_iterator
       operator--(int) _GLIBCXX_NOEXCEPT
       {
-       _Self __tmp = *this;
+       _List_iterator __tmp = *this;
        _M_node = _M_node->_M_prev;
        return __tmp;
       }
 
       _GLIBCXX_NODISCARD
       friend bool
-      operator==(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+      operator==(const _List_iterator& __x,
+                const _List_iterator& __y) _GLIBCXX_NOEXCEPT
       { return __x._M_node == __y._M_node; }
 
 #if __cpp_impl_three_way_comparison < 201907L
       _GLIBCXX_NODISCARD
       friend bool
-      operator!=(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+      operator!=(const _List_iterator& __x,
+                const _List_iterator& __y) _GLIBCXX_NOEXCEPT
       { return __x._M_node != __y._M_node; }
 #endif
 
@@ -339,7 +340,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
   template<typename _Tp>
     struct _List_const_iterator
     {
-      typedef _List_const_iterator<_Tp>                _Self;
       typedef const _List_node<_Tp>            _Node;
       typedef _List_iterator<_Tp>              iterator;
 
@@ -375,45 +375,47 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
       operator->() const _GLIBCXX_NOEXCEPT
       { return static_cast<_Node*>(_M_node)->_M_valptr(); }
 
-      _Self&
+      _List_const_iterator&
       operator++() _GLIBCXX_NOEXCEPT
       {
        _M_node = _M_node->_M_next;
        return *this;
       }
 
-      _Self
+      _List_const_iterator
       operator++(int) _GLIBCXX_NOEXCEPT
       {
-       _Self __tmp = *this;
+       _List_const_iterator __tmp = *this;
        _M_node = _M_node->_M_next;
        return __tmp;
       }
 
-      _Self&
+      _List_const_iterator&
       operator--() _GLIBCXX_NOEXCEPT
       {
        _M_node = _M_node->_M_prev;
        return *this;
       }
 
-      _Self
+      _List_const_iterator
       operator--(int) _GLIBCXX_NOEXCEPT
       {
-       _Self __tmp = *this;
+       _List_const_iterator __tmp = *this;
        _M_node = _M_node->_M_prev;
        return __tmp;
       }
 
       _GLIBCXX_NODISCARD
       friend bool
-      operator==(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+      operator==(const _List_const_iterator& __x,
+                const _List_const_iterator& __y) _GLIBCXX_NOEXCEPT
       { return __x._M_node == __y._M_node; }
 
 #if __cpp_impl_three_way_comparison < 201907L
       _GLIBCXX_NODISCARD
       friend bool
-      operator!=(const _Self& __x, const _Self& __y) _GLIBCXX_NOEXCEPT
+      operator!=(const _List_const_iterator& __x,
+                const _List_const_iterator& __y) _GLIBCXX_NOEXCEPT
       { return __x._M_node != __y._M_node; }
 #endif
 
-- 
2.47.0

Reply via email to