// Bug c++/16115 // { dg-options "-O2" } extern "C" void abort(); int count = 0; struct T { T() { count++; } T(const T&) { count++; } ~T() { if (count==0) abort(); --count; } }; struct auto_ptr { T* p; auto_ptr(T* __p) : p(__p) { } ~auto_ptr() { delete p; } T* release() { T* t = p; p = 0; return t; } }; void destroy (auto_ptr a) { delete a.release(); } int main () { destroy (new T); }