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)43int 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