------- Additional Comments From pinskia at gcc dot gnu dot org 2005-09-20 14:35 ------- Read 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 (); } As an alternative solution (unfortunately not backwards compatible with GCC 3.3), you may use using declarations instead of this->: template <typename T> struct C : B<T> { using B<T>::m; using B<T>::f; using B<T>::n; using B<T>::g; void h () { m = 0; f (); n = 0; g (); } }; -- What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |INVALID http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23976