I get these error messages:
aap.cc: In member function 'void Bar::function(T)':
aap.cc:16: error: expected `;' before 'it'
aap.cc:18: error: 'it' was not declared in this scope
When I compile this code:
#include
#include
template
class Foo {
public:
void function(T arg) { std::cout << arg; }
};
template
class Bar {
std::list *> foo_list;
public:
void function(T arg)
{
std::list *>::iterator it;
for (it = foo_list.begin(); it!=foo_list.end(); it++) {
Foo *el = (*it);
el->function (arg);
}
}
};
int
main(void)
{
#if 0
// Enabling this gives a better error message
Bar bar;
bar.function(1);
#endif
return 1;
}
When you enabled the #ifdeffed out code you will get these much clearer error
messages too:
aap.cc: In member function 'void Bar::function(T) [with T = int]':
aap.cc:31: instantiated from here
aap.cc:16: error: dependent-name 'std::list*,std::allocator*>
>::iterator' is parsed as a non-type, but instantiation yields a type
aap.cc:16: note: say 'typename std::list*,std::allocator*>
>::iterator' if a type is meant
verbose output:
trunk (--) ~/src/q/ g++ -v -save-temps aap.cc
Reading specs from
/sysmnt/cadappl_linuxi386_nsvr1/gcc/4.2.2.1/bin/../lib/gcc/i686-pc-linux-gnu/4.2.2/specs
Target: i686-pc-linux-gnu
Configured with: /home/gcc/gcc/gcc-4.2.2.1/gcc-4.2.2.1/configure
--prefix=/cadappl/gcc/4.2.2.1 --with-as=/cadappl/gcc/4.2.2.1/bin/as
--with-ld=/cadappl/gcc/4.2.2.1/bin/ld --enable-__cxa_atexit
--enable-threads=posix --with-march=i686 --with-tune=pentium4
--enable-languages=c,c++,fortran --with-gmp=/cadappl/gcc/4.2.2.1
--with-mpfr=/cadappl/gcc/4.2.2.1
Thread model: posix
gcc version 4.2.2
/sysmnt/cadappl_linuxi386_nsvr1/gcc/4.2.2.1/bin/../libexec/gcc/i686-pc-linux-gnu/4.2.2/cc1plus
-E -quiet -v -iprefix
/sysmnt/cadappl_linuxi386_nsvr1/gcc/4.2.2.1/bin/../lib/gcc/i686-pc-linux-gnu/4.2.2/
-D_GNU_SOURCE aap.cc -mtune=pentium4 -fpch-preprocess -o aap.ii
ignoring nonexistent directory
"/sysmnt/cadappl_linuxi386_nsvr1/gcc/4.2.2.1/bin/../lib/gcc/i686-pc-linux-gnu/4.2.2/../../../../i686-pc-linux-gnu/include"
ignoring duplicate directory
"/cadappl/gcc/4.2.2.1/lib/gcc/i686-pc-linux-gnu/4.2.2/../../../../include/c++/4.2.2"
ignoring duplicate directory
"/cadappl/gcc/4.2.2.1/lib/gcc/i686-pc-linux-gnu/4.2.2/../../../../include/c++/4.2.2/i686-pc-linux-gnu"
ignoring duplicate directory
"/cadappl/gcc/4.2.2.1/lib/gcc/i686-pc-linux-gnu/4.2.2/../../../../include/c++/4.2.2/backward"
ignoring duplicate directory
"/cadappl/gcc/4.2.2.1/lib/gcc/i686-pc-linux-gnu/4.2.2/include"
ignoring nonexistent directory
"/cadappl/gcc/4.2.2.1/lib/gcc/i686-pc-linux-gnu/4.2.2/../../../../i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/sysmnt/cadappl_linuxi386_nsvr1/gcc/4.2.2.1/bin/../lib/gcc/i686-pc-linux-gnu/4.2.2/../../../../include/c++/4.2.2
/sysmnt/cadappl_linuxi386_nsvr1/gcc/4.2.2.1/bin/../lib/gcc/i686-pc-linux-gnu/4.2.2/../../../../include/c++/4.2.2/i686-pc-linux-gnu
/sysmnt/cadappl_linuxi386_nsvr1/gcc/4.2.2.1/bin/../lib/gcc/i686-pc-linux-gnu/4.2.2/../../../../include/c++/4.2.2/backward
/sysmnt/cadappl_linuxi386_nsvr1/gcc/4.2.2.1/bin/../lib/gcc/i686-pc-linux-gnu/4.2.2/include
/usr/local/include
/cadappl/gcc/4.2.2.1/include
/usr/include
End of search list.
/sysmnt/cadappl_linuxi386_nsvr1/gcc/4.2.2.1/bin/../libexec/gcc/i686-pc-linux-gnu/4.2.2/cc1plus
-fpreprocessed aap.ii -quiet -dumpbase aap.cc -mtune=pentium4 -auxbase aap
-version -o aap.s
GNU C++ version 4.2.2 (i686-pc-linux-gnu)
compiled by GNU C version 4.2.2.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 473b7610f3bef24f1da62f9e674d528f
aap.cc: In member function 'void Bar::function(T)':
aap.cc:16: error: expected `;' before 'it'
aap.cc:18: error: 'it' was not declared in this scope
--
Summary: Unclear error message in unused template
Product: gcc
Version: 4.2.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: wim dot yedema at gmail dot com
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36353