https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114821

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
If the problem is simply that the __restrict qualifiers are not present because
we go through the generic function taking iterators, then we can just add:

--- a/libstdc++-v3/include/bits/stl_uninitialized.h
+++ b/libstdc++-v3/include/bits/stl_uninitialized.h
@@ -1109,8 +1109,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   template <typename _Tp, typename _Up>
     _GLIBCXX20_CONSTEXPR
     inline __enable_if_t<std::__is_bitwise_relocatable<_Tp>::value, _Tp*>
-    __relocate_a_1(_Tp* __first, _Tp* __last,
-                  _Tp* __result,
+    __relocate_a_1(_Tp* __restrict __first, _Tp* __last,
+                  _Tp* __restrict __result,
                   [[__maybe_unused__]] allocator<_Up>& __alloc) noexcept
     {
       ptrdiff_t __count = __last - __first;
@@ -1147,6 +1147,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                                 std::__niter_base(__result), __alloc);
     }

+  template <typename _Tp, typename _Up>
+    _GLIBCXX20_CONSTEXPR
+    inline _ForwardIterator
+    __relocate_a(_Tp* __restrict __first, _Tp* __last,
+                _Tp* __restrict __result,
+                [[__maybe_unused__]] allocator<_Up>& __alloc) noexcept
+    noexcept(std::__is_bitwise_relocatable<_Tp>::value)
+    {
+      return std::__relocate_a_1(__first, __last, __result, __alloc);
+    }
+
   /// @endcond
 #endif // C++11


If the problem is that std::pair<int, int> is not bitwise_relocatable, then we
could change that (as Marc suggested as a possible future enhancement):

--- a/libstdc++-v3/include/bits/stl_uninitialized.h
+++ b/libstdc++-v3/include/bits/stl_uninitialized.h
@@ -1082,6 +1082,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     struct __is_bitwise_relocatable
     : is_trivial<_Tp> { };

+  template<typename _Tp, typename _Up>
+    struct __is_bitwise_relocatable<pair<_Tp, _Up>, void>
+    : __and_<is_trivial<_Tp>, is_trivial<_Up>>
+    { };
+
   template <typename _InputIterator, typename _ForwardIterator,
            typename _Allocator>
     _GLIBCXX20_CONSTEXPR

Reply via email to