Blob Blame History Raw
From 8a5a2dc9f170fb79d3fb19e4263a28bdd1603dec Mon Sep 17 00:00:00 2001
From: Sergei Trofimovich <slyich@gmail.com>
Date: Wed, 8 Mar 2023 11:31:56 +0000
Subject: [PATCH 2/2] custom allocators: define missing 'rebind' type (#3895)

(cherry picked from commit 6cec5aefc97ad219b6fd5a4132f88f7c8f6800ee)
---
 tests/src/unit-allocator.cpp   | 9 +++++++++
 tests/src/unit-regression2.cpp | 9 +++++++++
 2 files changed, 18 insertions(+)

diff --git a/tests/src/unit-allocator.cpp b/tests/src/unit-allocator.cpp
index c6b77ed6..c3708e89 100644
--- a/tests/src/unit-allocator.cpp
+++ b/tests/src/unit-allocator.cpp
@@ -20,11 +20,20 @@ struct bad_allocator : std::allocator<T>
 {
     using std::allocator<T>::allocator;
 
+    bad_allocator() = default;
+    template<class U> bad_allocator(const bad_allocator<U>& /*unused*/) { }
+
     template<class... Args>
     void construct(T* /*unused*/, Args&& ... /*unused*/)
     {
         throw std::bad_alloc();
     }
+
+    template <class U>
+    struct rebind
+    {
+        using other = bad_allocator<U>;
+    };
 };
 } // namespace
 
diff --git a/tests/src/unit-regression2.cpp b/tests/src/unit-regression2.cpp
index 503d2a4f..8a141539 100644
--- a/tests/src/unit-regression2.cpp
+++ b/tests/src/unit-regression2.cpp
@@ -187,6 +187,15 @@ class my_allocator : public std::allocator<T>
 {
   public:
     using std::allocator<T>::allocator;
+
+    my_allocator() = default;
+    template<class U> my_allocator(const my_allocator<U>& /*unused*/) { }
+
+    template <class U>
+    struct rebind
+    {
+        using other = my_allocator<U>;
+    };
 };
 
 /////////////////////////////////////////////////////////////////////
-- 
2.41.0