[Bug c++/66601] New: RFE: improve diagnostics for failure to deduce template parameter pack that is not in the last position in the parameter list

avi@cloudius-systems.com gcc-bugzilla@gcc.gnu.org
Fri Jun 19 17:09:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66601

            Bug ID: 66601
           Summary: RFE: improve diagnostics for failure to deduce
                    template parameter pack that is not in the last
                    position in the parameter list
           Product: gcc
           Version: 5.1.1
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: avi@cloudius-systems.com
  Target Milestone: ---

Given the source

 template <typename... X, typename Y>
 void f(X... x, Y y) {
 }

 int main(int ac, char** av) {
   f(1, 2, 3, 4);
   return 0;
 }

gcc (correctly) fails to deduce X as int, int, int.

However, the diagnostic is not very helpful:

./variadic-function-nonlast.cc: In function ‘int main(int, char**)’:
./variadic-function-nonlast.cc:9:15: error: no matching function for call to
‘f(int, int, int, int)’
   f(1, 2, 3, 4);
               ^
./variadic-function-nonlast.cc:4:6: note: candidate: template<class ... X,
class Y> void f(X ..., Y)
 void f(X... x, Y y) {
      ^
./variadic-function-nonlast.cc:4:6: note:   template argument
deduction/substitution failed:
./variadic-function-nonlast.cc:9:15: note:   candidate expects 1 argument, 4
provided
   f(1, 2, 3, 4);


The user cannot understand from this why gcc is refusing to to deduce X, or
that explicitly specifying it (f<int, int, int>(1, 2, 3, 4)) would work.

If gcc would add an additional note:

./variadic-function-nonlast.cc:9:15: note:   parameter pack 'X' in non-last
position not specified; deduced as empty parameter pack 

then the user would understand exactly what happened here, and how to rectify
it.

The error message from clang 3.5 are not particularly helpful.


More information about the Gcc-bugs mailing list