#ifdef MEMORY_DEBUG
+#include <new>
+
class debug_new_counter_t
{
static int count;
void* operator new(size_t size, const char* file, int line);
void* operator new[](size_t size, const char* file, int line);
+// TODO: these might be GCC version dependant
+void* operator new(size_t size, const std::nothrow_t&, const char* file, int line);
+void* operator new[](size_t size, const std::nothrow_t&, const char* file, int line);
+
+inline void* operator new(size_t, void* __p, const char*, int) { return __p; }
+inline void* operator new[](size_t, void* __p, const char*, int) { return __p; }
+
// Redirect "normal" new to memory-tracking placement new.
-#define new new(__FILE__, __LINE__)
+#define new(...) new(__VA_ARGS__, __FILE__, __LINE__)
#endif // MEMORY_DEBUG