https://godbolt.org/g/sm5tMo For code below there are missing destructor calls - make_a() is called 5 times but ~A() only once. struct A { ~A(); }; A make_a(); struct B { B(A a = make_a()) {}; }; int main() { B b[5] = {}; }