<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Sat, Jul 5, 2025 at 1:27 AM Jonathan Wakely <<a href="mailto:jwakely@redhat.com">jwakely@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">In r16-1911-g6596f5ab746533 I claimed to have reordered some attributes<br>
for compatibility with Clang, but it looks like I got the Clang<br>
restriction backwards and put them all in the wrong order.<br>
<br>
libstdc++-v3/ChangeLog:<br>
<br>
        PR libstdc++/120949<br>
        * include/bits/stl_iterator.h (__normal_iterator): Fix order of<br>
        always_inline and nodiscard attributes for Clang compatibility.<br>
---<br>
<br>
Tested x86_64-linux, and tested lightly with Clang.<br></blockquote><div>LGTM.<br></div><div>I have also checked that this is indeed an order that is accepted by clang.<br></div><div>The fact that this restriction is only put on hidden friends is strange.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
 libstdc++-v3/include/bits/stl_iterator.h | 30 +++++++++++++-----------<br>
 1 file changed, 16 insertions(+), 14 deletions(-)<br>
<br>
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h<br>
index a7188f46f6db..75e794f6c020 100644<br>
--- a/libstdc++-v3/include/bits/stl_iterator.h<br>
+++ b/libstdc++-v3/include/bits/stl_iterator.h<br>
@@ -1211,7 +1211,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
 #else<br>
        // Forward iterator requirements<br>
       template<typename _Iter><br>
-       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD<br>
+       _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
        friend<br>
        _GLIBCXX_CONSTEXPR<br>
        bool<br>
@@ -1220,7 +1220,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
        _GLIBCXX_NOEXCEPT<br>
        { return __lhs.base() == __rhs.base(); }<br>
<br>
-      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD<br>
+      _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
       friend<br>
       _GLIBCXX_CONSTEXPR<br>
       bool<br>
@@ -1229,7 +1229,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
       { return __lhs.base() == __rhs.base(); }<br>
<br>
       template<typename _Iter><br>
-       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD<br>
+       _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
        friend<br>
        _GLIBCXX_CONSTEXPR<br>
        bool<br>
@@ -1238,7 +1238,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
        _GLIBCXX_NOEXCEPT<br>
        { return __lhs.base() != __rhs.base(); }<br>
<br>
-      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD<br>
+      _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
       friend<br>
       _GLIBCXX_CONSTEXPR<br>
       bool<br>
@@ -1248,15 +1248,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
<br>
       // Random access iterator requirements<br>
       template<typename _Iter><br>
+       _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
        friend<br>
-       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR<br>
+       _GLIBCXX_CONSTEXPR<br>
        inline bool<br>
        operator<(const __normal_iterator& __lhs,<br>
                  const __normal_iterator<_Iter, _Container>& __rhs)<br>
        _GLIBCXX_NOEXCEPT<br>
        { return __lhs.base() < __rhs.base(); }<br>
<br>
-      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD<br>
+      _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
       friend<br>
       _GLIBCXX20_CONSTEXPR<br>
       bool<br>
@@ -1265,15 +1266,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
       { return __lhs.base() < __rhs.base(); }<br>
<br>
       template<typename _Iter><br>
+       _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
        friend<br>
-       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR<br>
+       _GLIBCXX_CONSTEXPR<br>
        bool<br>
        operator>(const __normal_iterator& __lhs,<br>
                  const __normal_iterator<_Iter, _Container>& __rhs)<br>
        _GLIBCXX_NOEXCEPT<br>
        { return __lhs.base() > __rhs.base(); }<br>
<br>
-      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD<br>
+      _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
       friend<br>
       _GLIBCXX_CONSTEXPR<br>
       bool<br>
@@ -1282,7 +1284,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
       { return __lhs.base() > __rhs.base(); }<br>
<br>
       template<typename _Iter><br>
-       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD<br>
+       _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
        friend<br>
        _GLIBCXX_CONSTEXPR<br>
        bool<br>
@@ -1291,7 +1293,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
        _GLIBCXX_NOEXCEPT<br>
        { return __lhs.base() <= __rhs.base(); }<br>
<br>
-      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD<br>
+      _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
       friend<br>
       _GLIBCXX_CONSTEXPR<br>
       bool<br>
@@ -1300,7 +1302,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
       { return __lhs.base() <= __rhs.base(); }<br>
<br>
       template<typename _Iter><br>
-       __attribute__((__always_inline__)) _GLIBCXX_NODISCARD<br>
+       _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
        friend<br>
        _GLIBCXX_CONSTEXPR<br>
        bool<br>
@@ -1309,7 +1311,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
        _GLIBCXX_NOEXCEPT<br>
        { return __lhs.base() >= __rhs.base(); }<br>
<br>
-      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD<br>
+      _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
       friend<br>
       _GLIBCXX_CONSTEXPR<br>
       bool<br>
@@ -1341,7 +1343,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
 #endif<br>
        { return __lhs.base() - __rhs.base(); }<br>
<br>
-      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD<br>
+      _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
       friend<br>
       _GLIBCXX_CONSTEXPR<br>
       difference_type<br>
@@ -1349,7 +1351,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
        _GLIBCXX_NOEXCEPT<br>
       { return __lhs.base() - __rhs.base(); }<br>
<br>
-      __attribute__((__always_inline__)) _GLIBCXX_NODISCARD<br>
+      _GLIBCXX_NODISCARD __attribute__((__always_inline__))<br>
       friend<br>
       _GLIBCXX_CONSTEXPR<br>
       __normal_iterator<br>
-- <br>
2.50.0<br>
<br>
</blockquote></div></div>