This patch spawns from this game engine issue:
[blender-staging.git] / intern / memutil / MEM_Allocator.h
index 40716496d16f462fc8152f5b1d30cd0af4232121..68712e45558dcdb330d5579e4b6f1c06fd7fe62d 100644 (file)
 
 #include "guardedalloc/MEM_guardedalloc.h"
 
+#ifdef _MSC_VER
+#if _MSC_VER < 1300 // 1200 == VC++ 6.0 according to boost
+#define MS_VISUALC_6_0_WORKAROUND 1
+#endif
+#endif
+
 template<typename _Tp>
 struct MEM_Allocator
 {
@@ -40,16 +46,20 @@ struct MEM_Allocator
        typedef const _Tp& const_reference;
        typedef _Tp        value_type;
 
+#ifndef MS_VISUALC_6_0_WORKAROUND
        template<typename _Tp1>
         struct rebind { 
                typedef MEM_Allocator<_Tp1> other; 
        };
+#endif
 
        MEM_Allocator() throw() {}
-       MEM_Allocator(const MEM_Allocator& __a) throw() {}
+       MEM_Allocator(const MEM_Allocator&) throw() {}
 
+#ifndef MS_VISUALC_6_0_WORKAROUND
        template<typename _Tp1>
-        MEM_Allocator(const MEM_Allocator<_Tp1> __a) throw() { }
+        MEM_Allocator(const MEM_Allocator<_Tp1>) throw() { }
+#endif
 
        ~MEM_Allocator() throw() {}
 
@@ -57,6 +67,11 @@ struct MEM_Allocator
 
        const_pointer address(const_reference __x) const { return &__x; }
 
+#ifdef MS_VISUALC_6_0_WORKAROUND
+       char *_Charalloc(size_type n) {
+               return (char *) MEM_mallocN(n, "STL MEM_Allocator VC6.0");
+       }
+#endif
        // NB: __n is permitted to be 0.  The C++ standard says nothing
        // about what the return value is when __n == 0.
        _Tp* allocate(size_type __n, const void* = 0) {
@@ -68,10 +83,17 @@ struct MEM_Allocator
                return __ret;
        }
 
+#ifndef MS_VISUALC_6_0_WORKAROUND
        // __p is not permitted to be a null pointer.
        void deallocate(pointer __p, size_type){ 
                MEM_freeN(__p);
        }
+#else
+       // __p is not permitted to be a null pointer.
+       void deallocate(void* __p, size_type){ 
+               MEM_freeN(__p);
+       }
+#endif
 
        size_type max_size() const throw() { 
                return size_t(-1) / sizeof(_Tp);