https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71075
Bug ID: 71075 Summary: Broken diagnostic: 'integer_cst' not supported by 'dump_decl' Product: gcc Version: unknown Status: UNCONFIRMED Severity: minor Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: arthur.j.odwyer at gmail dot com Target Milestone: --- I'm not sure how this isn't a duplicate of https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51229 , but that bug has been marked RESOLVED FIXED since 2011, and this bug still reproduces in GCC 7.0. template<typename T, int I> struct A {}; template<typename T> void foo(A<T,1>) {} int main() { foo(A<int,2>()); } ==== prog.cc: In function 'int main()': prog.cc:4:19: error: no matching function for call to 'foo(A<int, 2>)' foo(A<int,2>()); ^ prog.cc:2:27: note: candidate: template<class T> void foo(A<T, 1>) template<typename T> void foo(A<T,1>) {} ^~~ prog.cc:2:27: note: template argument deduction/substitution failed: prog.cc:4:19: note: template argument '2' does not match '#'integer_cst' not supported by dump_decl#<declaration error>' foo(A<int,2>()); ^ ==== Notice the last diagnostic line above: "template argument '2' does not match '#'integer_cst' not supported by dump_decl#<declaration error>'". I think GCC is correct in rejecting the input program; it just doesn't understand how to print the resulting diagnostic.