Membro protegido de acesso de uma classe em uma classe derivada

Eu tenho uma base de código antiga aqui, onde eles usaram variáveis ​​de membro protegidas. Se isso é ou não uma boa ideia pode ser discutido. No entanto, o código deve ter compilado bem com o gcc3. Eu tenho uma barra de classe de modelo derivada que usa protegido membro x do modelo de classe Foo como assim

template <class Something> class Foo {  
public:  
// stuff...  
protected:  
  some::type x;  
}

template <class Something> Bar : Foo<Something> {
public:
  void cleanup();
}

E na declaração de método de limpeza () há algo feito com x

template <class Something> void Bar<Something>::cleanup() {
  doSomeThingCleanUpLike (x);
}

Isso não funciona com o gcc4, embora ele deva ter funcionado com o gcc3. Funciona quando eu mudo para

doSomeThingCleanUpLike (this->x);

Por que esse é o caso?

questionAnswers(2)

yourAnswerToTheQuestion