Maybe it isn't too late yet to change the specification in the ABI (or maybe there isn't even one yet) for cases like this -- consider ------------------------ template <typename... T> struct X { template <typename... U> int f() { this->error; } }; template int X<int,double>::f<int,double>(); ------------------------ We get this error message:
g/x> c++ -std=c++0x -c x.cc x.cc: In member function 'int X<T>::f() [with U = int, double, T = int, double]': x.cc:4: instantiated from here x.cc:2: error: 'struct X<int, double>' has no member named 'error' What bothers me is this bit: [with U = int, double, T = int, double] where it isn't quite clear due to lack of parentheses/braces/... which types belong where. I think it would be a lot clearer if it read like this: [with U = {int, double}, T = {int, double}] I'm sure it would also make automated parsing of such strings a lot simpler if someone wanted to do that. Best Wolfgang -- Summary: [C++0x] badly readable diagnostic output with variadic templates Product: gcc Version: 4.3.1 Status: UNCONFIRMED Keywords: diagnostic Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: bangerth at dealii dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38888