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