https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94501
Bug ID: 94501 Summary: bogus "no matches converting function ... to type ..." error with variadic function template Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ppalka at gcc dot gnu.org Target Milestone: --- $ cat testcase.C template<typename... Ts> void foo(Ts...); int main() { void (*f)(int*) = foo<int[]>; } $ g++ -std=c++11 testcase.C testcase.C: In function ‘int main()’: testcase.C:6:21: error: no matches converting function ‘foo’ to type ‘void (*)(int*)’ 6 | void (*f)(int*) = foo<int[]>; | ^~~~~~~~~~ testcase.C:2:6: note: candidate is: ‘template<class ... Ts> void foo(Ts ...)’ 2 | void foo(Ts...); | ^~~ But if we replace the template parameter pack Ts with an ordinary template parameter T then the testcase compiles successfully. The fact that we perform array-to-pointer decaying of "int[]" after substituting into the function parameter pack seems to be relevant here.