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

Reply via email to