Acceder al miembro protegido de una clase en una clase derivada

Tengo una base de código antigua aquí, donde utilizaron variables de miembro protegidas. Se puede discutir si esta es una buena idea o no. Sin embargo, el código debe haber sido bien compilado con gcc3. Tengo una barra de clase de plantilla derivada que usa el miembro protegido x de la plantilla de clase Foo como así

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

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

Y en la declaración del método de limpieza () hay algo hecho con x

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

Esto no funciona con gcc4, aunque debería haber funcionado con gcc3. Funciona cuando lo cambio a

doSomeThingCleanUpLike (this->x);

¿Por qué es ese el caso?

Respuestas a la pregunta(2)

Su respuesta a la pregunta