[Bug c++/64446] New: Misleading error message when inheriting from a template class w/o the template params
petschy at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Dec 30 15:05:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64446
Bug ID: 64446
Summary: Misleading error message when inheriting from a
template class w/o the template params
Product: gcc
Version: 5.0
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: petschy at gmail dot com
When compiling the under code, g++ gives a misleading error message:
$ g++-5.0.0 -Wall 20141230-templ_base.cpp
20141230-templ_base.cpp:7:1: error: expected class-name before ‘{’ token
'Base' is definitely a valid class name.
The problem is that the name given is a class, but it's a template and the
template argument is missing.
However, in the second case, when inheriting from Base2 and only one template
argument is given of the two, the error message is OK: wrong number of template
arguments (1, should be 2).
Something similar would be desirable in the first case, not to waste time
staring at the screen, searching for a typo in the class name and finding none.
Like '<classname> is a template but no template arguments are given'.
$ g++-5.0.0 -v
Using built-in specs.
COLLECT_GCC=g++-5.0.0
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/5.0.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --enable-languages=c,c++ --disable-multilib
--program-suffix=-5.0.0
Thread model: posix
gcc version 5.0.0 20141222 (experimental) (GCC)
4.9 and 4.8 gives the same misleading error message.
----8<----8<----8<----8<----
template<typename T>
struct Base
{
};
struct Foo : Base
{ // error: expected class-name before ‘{’ token
};
template<typename T, typename U>
struct Base2
{
};
struct Foo2 : Base2<int> // OK: wrong number of template arguments (1, should
be 2)
{
};
More information about the Gcc-bugs
mailing list