90th Cygnus<->FSF quick merge
authorMike Stump <mrs@gcc.gnu.org>
Tue, 4 Feb 1997 03:09:59 +0000 (03:09 +0000)
committerMike Stump <mrs@gcc.gnu.org>
Tue, 4 Feb 1997 03:09:59 +0000 (03:09 +0000)
From-SVN: r13605

gcc/cp/inc/new

index 4bfb960c8517ce55233ee4b18d3cee7e7d682c07..f4b0b975cdbbd4899caeda4e1212db1e267fae38 100644 (file)
@@ -6,6 +6,7 @@
 
 #pragma interface "new"
 #include <stddef.h>
+#include <exception>
 
 extern "C++" {
 
@@ -13,8 +14,15 @@ extern "C++" {
 namespace std {
 #endif
 
-typedef void (*new_handler)();
-extern "C" new_handler set_new_handler (new_handler);
+  class bad_alloc : public exception {
+  public:
+    virtual const char* what() const throw() { return "bad_alloc"; }
+  };
+
+  struct nothrow_t {};
+  extern const nothrow_t nothrow;
+  typedef void (*new_handler)();
+  extern "C" new_handler set_new_handler (new_handler);
 
 #if 0
 } // namespace std
@@ -26,13 +34,15 @@ extern "C" void __default_new_handler (void);
 
 // replaceable signatures
 void *operator new (size_t);
+void *operator new (size_t, const nothrow_t&) throw();
 void *operator new[] (size_t);
-void operator delete (void *);
-void operator delete[] (void *);
+void *operator new[] (size_t, const nothrow_t&) throw();
+void operator delete (void *) throw();
+void operator delete[] (void *) throw();
 
 // default placement versions of operator new
-inline void *operator new(size_t, void *place) { return place; }
-inline void *operator new[](size_t, void *place) { return place; }
+inline void *operator new(size_t, void *place) throw() { return place; }
+inline void *operator new[](size_t, void *place) throw() { return place; }
 } // extern "C++"
 
 #endif