------- 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

Reply via email to