[Bug c++/59254] New: confusing diagnostic for undefined template shadowed by declaration in inline namespace
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Nov 22 15:29:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59254
Bug ID: 59254
Summary: confusing diagnostic for undefined template shadowed
by declaration in inline namespace
Product: gcc
Version: 4.9.0
Status: UNCONFIRMED
Keywords: diagnostic
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: redi at gcc dot gnu.org
namespace outer {
inline namespace inner {
#ifndef OK
template<typename T> struct A;
#endif
}
template<typename T> struct A;
template class A<int>;
}
This gives a confusing diagnostic:
$ g++ -std=gnu++11 n.cc -c
n.cc:10:18: error: ‘A’ is not a class template
template class A<int>;
^
n.cc:10:18: error: template argument required for ‘class A’
That's particularly confusing because A is a class template, and so is inner::A
(although if it's just a class type the error is the same) and because a
template argument is given.
Without the previous definition in the inline namespace we get the expected
explanation:
$ g++ -std=gnu++11 n.cc -c -DOK
n.cc:10:18: error: explicit instantiation of ‘class outer::A<int>’ before
definition of template
template class A<int>;
^
More information about the Gcc-bugs
mailing list