1 // PR c++/66501
2 // { dg-do run { target c++11 } }
3 
4 int total_size;
5 
6 struct Object
7 {
8   int size = 0;
9 
10   Object () = default;
11 
~ObjectObject12   ~Object () {
13     total_size -= size;
14   }
15 
16   Object (const Object &) = delete;
17   Object & operator= (const Object &) = delete;
18 
ObjectObject19   Object (Object && b) {
20     size = b.size;
21     b.size = 0;
22   }
23 
24   Object & operator= (Object && b) {
25     if (this != & b) {
26       total_size -= size;
27       size = b.size;
28       b.size = 0;
29     }
30     return * this;
31   }
32 
growObject33   void grow () {
34     size ++;
35     total_size ++;
36   }
37 };
38 
39 struct Container {
40   Object objects[2];
41 };
42 
main(void)43 int main (void)
44 {
45   Container container;
46 
47   // grow some objects in the container
48   for (auto & object : container.objects)
49     object.grow ();
50 
51   // now empty it
52   container = Container ();
53 
54   return total_size;
55 }
56