I'd prefer to move our custom new/delete into asan_new_delete.cc, and in that file it would probably be ok to include <new>.<div><br></div><div>--kcc <br><br><div class="gmail_quote">On Wed, Apr 4, 2012 at 7:53 AM,  <span dir="ltr"><<a href="mailto:samsonov@google.com">samsonov@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Reviewers: kcc1, timurrrr_at_google_com,<br>
<br>
Message:<br>
#include <new> brings a number of system libraries (e.g. <string.h> on<br>
Windows), which is probably unwanted. We (hopefully) can replace<br>
std::nothrow_t and std::bad_alloc by custom stubs, so that our overload<br>
of new would still work in a user program.<br>
<br>
<br>
<br>
Please review this at <a href="http://codereview.appspot.com/5966077/" target="_blank">http://codereview.appspot.com/<u></u>5966077/</a><br>
<br>
Affected files:<br>
  M     asan_interceptors.cc<br>
<br>
<br>
Index: asan_interceptors.cc<br>
==============================<u></u>==============================<u></u>=======<br>
--- asan_interceptors.cc        (revision 154006)<br>
+++ asan_interceptors.cc        (working copy)<br>
@@ -22,8 +22,6 @@<br>
 #include "asan_thread_registry.h"<br>
 #include "interception/interception.h"<br>
<br>
-#include <new><br>
-<br>
 // Use macro to describe if specific function should be<br>
 // intercepted on a given platform.<br>
 #if !defined(_WIN32)<br>
@@ -331,6 +329,10 @@<br>
 void *operator new(size_t size) { OPERATOR_NEW_BODY; }<br>
 void *operator new[](size_t size) { OPERATOR_NEW_BODY; }<br>
 #else<br>
+namespace std {<br>
+class bad_alloc {};<br>
+class nothrow_t;<br>
+}  // namespace std<br>
 void *operator new(size_t size) throw(std::bad_alloc) { OPERATOR_NEW_BODY; }<br>
 void *operator new[](size_t size) throw(std::bad_alloc) { OPERATOR_NEW_BODY; }<br>
 void *operator new(size_t size, std::nothrow_t const&) throw()<br>
<br>
<br>
</blockquote></div><br></div>