2

Consider this code:

  template <typename T>
  struct X{
     struct Y{
          unsigned i;
     };

    template<typename E>
    struct Z : public Y {

       unsigned foo(){
          return i;
       }
    };


  };

we have a class template X with nested classes Y and Z. Z is again a template and inherits from Y. Thus, it also inherits the field i. However, this code does not compile. The compiles says, that it cannot resolve i in the foo() method of Z. Prefixing i explicitly with this-> solves the problem.

If I remove the outer type X, then the prefix is no longer required and the code compiles fine as it is.

Why is this explicit this-> prefix required here?

gexicide
  • 38,535
  • 21
  • 92
  • 152

0 Answers0