// PR c++/5757 | |
// Test that when a constructor throws in a new-expression, we pass the | |
// right pointer to operator delete. | |
// { dg-do run } | |
#include <new> | |
#include <stddef.h> | |
int ret = 1; | |
void *ptr; | |
void * operator new[] (size_t s) throw (std::bad_alloc) | |
{ | |
ptr = operator new (s); | |
return ptr; | |
} | |
void operator delete[] (void *p) throw () | |
{ | |
if (p == ptr) | |
ret = 0; | |
operator delete (p); | |
} | |
struct A | |
{ | |
A() { throw 1; } | |
~A() {} | |
}; | |
int | |
main () | |
{ | |
try | |
{ | |
A *p = new A[4]; | |
} | |
catch (...) {} | |
return ret; | |
} |