libstdc++-v3/ChangeLog:

        * testsuite/20_util/unique_ptr/modifiers/93562.cc: Define a
        separate deleter for array cases.
---

Tested powerpc64le-linux.

 .../20_util/unique_ptr/modifiers/93562.cc     | 25 +++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc 
b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc
index 95df7afb9644..044357888ea6 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/93562.cc
@@ -76,11 +76,32 @@ test03()
   VERIFY(p2.get_deleter().id == -1);
 }
 
+namespace B
+{
+  struct Deleter
+  {
+    Deleter& operator=(const Deleter&) = delete;
+
+    void operator()(int* p) const noexcept { delete[] p; }
+
+    // found by ADL
+    friend void swap(Deleter& lhs, Deleter& rhs) noexcept
+    { std::swap(lhs.id, rhs.id); }
+
+    int id;
+  };
+
+  static_assert(!std::is_move_assignable<Deleter>::value, "not assignable");
+#if __cplusplus >= 201703L
+  static_assert(std::is_swappable_v<Deleter>, "but swappable");
+#endif
+} // namespace B
+
 void
 test04()
 {
-  std::unique_ptr<int[], A::Deleter> p1(new int[1]{1}, { -1 });
-  std::unique_ptr<int[], A::Deleter> p2(new int[2]{2, 2}, { -2 });
+  std::unique_ptr<int[], B::Deleter> p1(new int[1]{1}, { -1 });
+  std::unique_ptr<int[], B::Deleter> p2(new int[2]{2, 2}, { -2 });
   int* const pi1 = p1.get();
   int* const pi2 = p2.get();
   // This type must swappable even though the deleter is not move-assignable:
-- 
2.51.0

Reply via email to