https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80804
Bug ID: 80804 Summary: Default constructor improperly invoked in C++1z mode Product: gcc Version: 7.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: barry.revzin at gmail dot com Target Milestone: --- >From StackOverflow (http://stackoverflow.com/q/44015848/2069064), this code: #include <cstdio> #include <initializer_list> struct S { S() { std::printf("DEF "); } // (1) S(std::initializer_list<int> il) // (2) { std::printf("L=%zu ", il.size()); } }; int main() { S x({}); } in gcc 7.1 with -std=c++1z invokes the default constructor. In C++14 mode, it invokes the initializer_list constructor, as does clang in both modes. But the default constructor shouldn't be invoked, since {} isn't an expression so the "guaranteed elision" bullet in dcl.init shouldn't apply.