// PR c++/68949 // { dg-do run { target c++11 } } struct Sub { int i; constexpr Sub() : i(-1) {} // remove constexpr and it works as expected Sub(Sub&& rhs); // remove this constructor and it works as epxected. }; // v-- move this inline and it works as expected // v-- remove ': Sub()' and it works as expected Sub::Sub(Sub&& rhs) : Sub() { int tmp = i; i = rhs.i; rhs.i = tmp; } struct Class { // v-- remove '[1]' and it works as expected // v-- add '= {}' and it works as expected Sub s[1]; // v-- add ': s{}' and it works as expected // v-- removing this constructor makes it work as expected Class() {} }; int main() { Class c; if (c.s[0].i != -1) __builtin_abort(); }