]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/smart_ptr/test/allocate_shared_array_esft_test.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / smart_ptr / test / allocate_shared_array_esft_test.cpp
index 30edfffe7ead2dd788a64e7654cb10eaf3f41389..1e0afaf616e05237759faeb66082429870800117 100644 (file)
@@ -1,39 +1,79 @@
 /*
-(c) 2012-2015 Glen Joseph Fernandes
-<glenjofe -at- gmail.com>
+Copyright 2012-2015 Glen Joseph Fernandes
+(glenjofe@gmail.com)
 
-Distributed under the Boost Software
-License, Version 1.0.
-http://boost.org/LICENSE_1_0.txt
+Distributed under the Boost Software License, Version 1.0.
+(http://www.boost.org/LICENSE_1_0.txt)
 */
 #include <boost/core/lightweight_test.hpp>
 #include <boost/smart_ptr/enable_shared_from_this.hpp>
 #include <boost/smart_ptr/make_shared.hpp>
 
-class type 
+template<class T = void>
+struct creator {
+    typedef T value_type;
+
+    template<class U>
+    struct rebind {
+        typedef creator<U> other;
+    };
+
+    creator() { }
+
+    template<class U>
+    creator(const creator<U>&) { }
+
+    T* allocate(std::size_t size) {
+        return static_cast<T*>(::operator new(sizeof(T) * size));
+    }
+
+    void deallocate(T* ptr, std::size_t) {
+        ::operator delete(ptr);
+    }
+};
+
+template<class T, class U>
+inline bool
+operator==(const creator<T>&, const creator<U>&)
+{
+    return true;
+}
+
+template<class T, class U>
+inline bool
+operator!=(const creator<T>&, const creator<U>&)
+{
+    return false;
+}
+
+class type
     : public boost::enable_shared_from_this<type> {
 public:
-    static unsigned int instances;
-    explicit type() {
-        instances++;
+    static unsigned instances;
+
+    type() {
+        ++instances;
     }
+
     ~type() {
-        instances--;
+        --instances;
     }
+
 private:
     type(const type&);
     type& operator=(const type&);
 };
 
-unsigned int type::instances = 0;
+unsigned type::instances = 0;
 
 int main()
 {
     BOOST_TEST(type::instances == 0);
     {
-        boost::shared_ptr<type[]> a1 = boost::allocate_shared<type[]>(std::allocator<type>(), 3);
+        boost::shared_ptr<type[]> result =
+            boost::allocate_shared<type[]>(creator<type>(), 3);
         try {
-            a1[0].shared_from_this();
+            result[0].shared_from_this();
             BOOST_ERROR("shared_from_this did not throw");
         } catch (...) {
             BOOST_TEST(type::instances == 3);
@@ -41,9 +81,10 @@ int main()
     }
     BOOST_TEST(type::instances == 0);
     {
-        boost::shared_ptr<type[]> a1 = boost::allocate_shared_noinit<type[]>(std::allocator<type>(), 3);
+        boost::shared_ptr<type[]> result =
+            boost::allocate_shared_noinit<type[]>(creator<>(), 3);
         try {
-            a1[0].shared_from_this();
+            result[0].shared_from_this();
             BOOST_ERROR("shared_from_this did not throw");
         } catch (...) {
             BOOST_TEST(type::instances == 3);