[Bf-committers] Re: MEM_CacheLimiter breaks msvc6 compile repairable!

Peter Schlaile peter at schlaile.de
Thu Feb 9 21:33:02 CET 2006


Hi Ole,

could you try the attached patch, that should detect MSVC6.0 and make it
compile. Any suggestions welcome. (Could also others try this with newer
versions of MSVC++ etc. so that I do not ruin anyone's day by commiting
it...)

Greetings,
Peter


-------------- next part --------------
Index: MEM_Allocator.h
===================================================================
RCS file: /cvsroot/bf-blender/blender/intern/memutil/MEM_Allocator.h,v
retrieving revision 1.1
diff -u -r1.1 MEM_Allocator.h
--- MEM_Allocator.h	5 Feb 2006 18:56:27 -0000	1.1
+++ MEM_Allocator.h	9 Feb 2006 20:19:53 -0000
@@ -29,6 +29,12 @@
 
 #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 @@
 	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() {}
 
+#ifndef MS_VISUALC_6_0_WORKAROUND
 	template<typename _Tp1>
         MEM_Allocator(const MEM_Allocator<_Tp1> __a) throw() { }
+#endif
 
 	~MEM_Allocator() throw() {}
 
@@ -57,6 +67,11 @@
 
 	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 @@
 		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); 


More information about the Bf-committers mailing list