Support allocators with explicit conversion constructors. Fixes bug #29000

llvm-svn: 278904
diff --git a/libcxx/test/support/min_allocator.h b/libcxx/test/support/min_allocator.h
index 701159e..8e0afab 100644
--- a/libcxx/test/support/min_allocator.h
+++ b/libcxx/test/support/min_allocator.h
@@ -340,6 +340,31 @@
     friend bool operator!=(min_allocator x, min_allocator y) {return !(x == y);}
 };
 
+template <class T>
+class explicit_allocator
+{
+public:
+    typedef T value_type;
+
+    explicit_allocator() TEST_NOEXCEPT {}
+
+    template <class U>
+    explicit explicit_allocator(explicit_allocator<U>) TEST_NOEXCEPT {}
+
+    T* allocate(std::size_t n)
+    {
+        return static_cast<T*>(::operator new(n*sizeof(T)));
+    }
+
+    void deallocate(T* p, std::size_t)
+    {
+        return ::operator delete(static_cast<void*>(p));
+    }
+
+    friend bool operator==(explicit_allocator, explicit_allocator) {return true;}
+    friend bool operator!=(explicit_allocator x, explicit_allocator y) {return !(x == y);}
+};
+
 #endif  // TEST_STD_VER >= 11
 
 #endif  // MIN_ALLOCATOR_H