...so the placement new is really trivial:)
diff --git a/Eigen/src/Core/Matrix.h b/Eigen/src/Core/Matrix.h
index 779b442..f990167 100644
--- a/Eigen/src/Core/Matrix.h
+++ b/Eigen/src/Core/Matrix.h
@@ -143,7 +143,7 @@
 
     void *operator new(size_t, void *ptr) throw()
     {
-      return static_cast<void*>(ptr);
+      return ptr;
     }
 
     void *operator new[](size_t size) throw()
@@ -153,7 +153,7 @@
 
     void *operator new[](size_t, void *ptr) throw()
     {
-      return static_cast<void*>(ptr);
+      return ptr;
     }
 
     void operator delete(void * ptr) { ei_aligned_free(static_cast<ByteAlignedAsNeeded *>(ptr), 0); }