http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60437
Bug ID: 60437 Summary: [C++11] Bogus "error: no matching function for call to 'X::X(<brace-enclosed initializer list>)'" Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ppluzhnikov at google dot com CC: daniel.kruegler at googlemail dot com CC: daniel.kruegler at googlemail dot com Using current trunk g++ (GCC) 4.9.0 20140305 (experimental) g++ -c t.cc -std=c++11 t.cc: In function 'void f()': t.cc:10:8: error: no matching function for call to 'X::X(<brace-enclosed initializer list>)' X x{1}; ^ t.cc:10:8: note: candidates are: t.cc:6:3: note: X::X(std::initializer_list<int>) X(std::initializer_list<int> init = std::initializer_list<int>()){} ^ t.cc:6:3: note: no known conversion for argument 1 from 'int' to 'std::initializer_list<int>' t.cc:3:7: note: constexpr X::X(const X&) class X { ^ t.cc:3:7: note: no known conversion for argument 1 from 'int' to 'const X&' t.cc:3:7: note: constexpr X::X(X&&) t.cc:3:7: note: no known conversion for argument 1 from 'int' to 'X&&' Code accepted by clang, and is correct (AFAICT): #include <initializer_list> class X { public: // X(std::initializer_list<int> init); // OK X(std::initializer_list<int> init = std::initializer_list<int>()){} }; void f(){ X x{1}; }