https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118047
Bug ID: 118047 Summary: Incorrect direct-initialization of vector of struct of array of struct of enum Product: gcc Version: 14.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: MillerBenjaminT at johndeere dot com Target Milestone: --- Created attachment 59869 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59869&action=edit Preprocessed source file I've been hunting down an error in the Qt sources and I think I might have found a compiler bug involving list appertainment. In short, if a vector of structs, each containing one element that is a default-initialized array of structs containing one enum that is assigned a value is list-initialized with { { } }, the vector will contain 0 elements. My best guess here is that g++ is creating an empty initializer list and copy constructing another empty initializer list, rather than calling the default constructor of the outermost struct. #include <vector> enum E { One }; struct A { E e = One; }; struct B { A as[3] {}; }; int main() { std::vector<B> bs { { } }; if (bs.size() != 1) { throw; // Throws on g++ >= 12.1.0 } return 0; } Here is a godbolt snippet of this minimal example: https://godbolt.org/z/zf96vY3Ev The vector will have 0 elements on any g++ >= 12.1.0 and will have 1 element on any suitable clang or icc compiler.