http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56418
Bug #: 56418 Summary: <brace-enclosed initializer list> errors do not show the types (makes it hard to debug) Classification: Unclassified Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: mscl...@gmail.com Created attachment 29518 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29518 Example of the problem. When you have something like: foo({ 1, 2, 3 }); vs: foo(Bar(1, 2, 3)); the error message is hard to diagnose. See the attached foo.cpp for an example. In the foo.cpp example, the lines that pass the wrong argument via explicit construction ([5] and [7]) tell the user exactly what the problem is: foo.cpp:12:21: note: candidates are: foo.cpp:2:14: note: Foo::Foo(int, float, Bar) foo.cpp:2:14: note: no known conversion for argument 3 from ‘int’ to ‘Bar’ whereas the lines that pass the arguments using the initializer list syntax are impossible to diagnose from the error message: foo.cpp:18:21: error: invalid initialization of reference of type ‘const Foo&’ from expression of type ‘<brace-enclosed initializer list>’ foo.cpp:4:6: error: in passing argument 1 of ‘void foo(const Foo&)’