I ported some gcc 3.3 code over to gcc 4.0 for the first time last week
and had this exact same problem. Copying and pasting the relevant bits
from the gcc 3.4 release page at
http://gcc.gnu.org/gcc-3.4/changes.html:
================================================== ====
In a template definition, unqualified names will no longer find members
of a dependent base (as specified by [temp.dep]/3 in the C++ standard).
For example,
template <typename T> struct B {
int m;
int n;
int f ();
int g ();
};
int n;
int g ();
template <typename T> struct C : B<T> {
void h ()
{
m = 0; // error
f (); // error
n = 0; // ::n is modified
g (); // ::g is called
}
};
You must make the names dependent, e.g. by prefixing them with this->.
Here is the corrected definition of C<T>::h,
template <typename T> void C<T>::h ()
{
this->m = 0;
this->f ();
this->n = 0
this->g ();
}
==============================================
Best,
Nathan