+++ /dev/null
-// Test that a throw in foo destroys the A, but does not free the memory.
-
-#include <cstddef>
-#include <cstdlib>
-#include <new>
-
-struct A {
- A();
- ~A();
-};
-
-struct B {
- B (A);
-};
-
-void foo (B*);
-
-int newed, created;
-
-int main ()
-{
- try {
- foo (new B (A ()));
- } catch (...) { }
-
- return !(newed && !created);
-}
-
-A::A() { created = 1; }
-A::~A() { created = 0; }
-B::B(A) { }
-void foo (B*) { throw 1; }
-
-void* operator new (size_t size) throw (std::bad_alloc)
-{
- ++newed;
- return (void *) std::malloc (size);
-}
-
-void operator delete (void *p) throw ()
-{
- --newed;
- std::free (p);
-}
-
-
-
-