Some minor points spotted while working on the _GLIBCXX_DEBUG implementation.

I'm surprised that gcc did not complained about the duplicated std::swap implementation. He seems to be smart enough to see that it is the same despite the different noexcept qualification.

    libstdc++: std::inplace_vector implementation cleaup

    Remove duplicated std::swap implementations.

    Remove use of std::ref in std::erase_if.

    libstdc++-v3/ChangeLog

            * include/std/inplace_vector: Remove refwrap.h include.
            (std::swap(inplace_vector<>&, inplace_vector<>&)): Remove the duplicated             implementation at std namespace level. Keep the friend inline one.
            (std::erase_if): Remove std::ref usage.

23_containers/inplace_vector tests run under Linux x86_64.

Ok to commit ?

François
diff --git a/libstdc++-v3/include/std/inplace_vector 
b/libstdc++-v3/include/std/inplace_vector
index b5a81bed3c9..02dfb8cd389 100644
--- a/libstdc++-v3/include/std/inplace_vector
+++ b/libstdc++-v3/include/std/inplace_vector
@@ -42,7 +42,6 @@
 #include <bits/ranges_base.h> // borrowed_iterator_t, 
__detail::__container_compatible_range
 #include <bits/ranges_util.h> // subrange
 #include <bits/ranges_uninitialized.h>
-#include <bits/refwrap.h>
 #include <bits/stl_construct.h>
 #include <bits/stl_uninitialized.h>
 #include <bits/stl_algo.h> // rotate
@@ -824,6 +823,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                                                      __detail::__synth3way);
       }
 
+      // [inplace.vector.special], specialized algorithms
       constexpr friend void
       swap(inplace_vector& __x, inplace_vector& __y)
       noexcept(is_nothrow_swappable_v<_Tp> && 
is_nothrow_move_constructible_v<_Tp>)
@@ -908,13 +908,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        }
     };
 
-  // [inplace.vector.special], specialized algorithms
-  template<typename _Tp, size_t _Nm>
-    constexpr void
-    swap(inplace_vector<_Tp, _Nm>& __x, inplace_vector<_Tp, _Nm>& __y)
-    noexcept(noexcept(__x.swap(__y)))
-    { __x.swap(__y); }
-
   // specialization for zero capacity, that is required to be trivally copyable
   // and empty regardless of _Tp.
   template<typename _Tp>
@@ -1343,7 +1336,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       const auto __osz = __cont.size();
       const auto __end = __cont.end();
       auto __removed = std::__remove_if(__cont.begin(), __end,
-                                       __ops::__pred_iter(std::ref(__pred)));
+                                       __ops::__pred_iter(__pred));
       if (__removed != __end)
        {
          __cont.erase(__niter_wrap(__cont.begin(), __removed),

Reply via email to