1// Bug c++/16115 2// { dg-options "-O2" } 3 4extern "C" void abort(); 5 6int count = 0; 7 8struct T { 9 T() { count++; } 10 T(const T&) { count++; } 11 ~T() { if (count==0) abort(); --count; } 12}; 13 14struct auto_ptr { 15 T* p; 16 17 auto_ptr(T* __p) : p(__p) { } 18 ~auto_ptr() { delete p; } 19 20 T* release() { 21 T* t = p; 22 p = 0; 23 return t; 24 } 25}; 26 27void destroy (auto_ptr a) { 28 delete a.release(); 29} 30 31 32int main () 33{ 34 destroy (new T); 35} 36