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.