У меня есть старая кодовая база, где они использовали защищенные переменные-члены. Является ли это хорошей идеей, можно обсудить. Тем не менее, код должен быть скомпилирован нормально с gcc3.
У меня есть производный шаблон класса Bar, который использует защищенный член x из шаблона класса Foo, например,
template <class Something> class Foo {
public:
// stuff...
protected:
some::type x;
}
template <class Something> Bar : Foo<Something> {
public:
void cleanup();
}
А в объявлении метода cleanup () что-то делается с x
template <class Something> void Bar<Something>::cleanup() {
doSomeThingCleanUpLike (x);
}
Это не работает с gcc4, хотя должно было работать с gcc3. Это работает, когда я изменяю его на
doSomeThingCleanUpLike (this->x);
Почему это так?