Problem z GCC: użycie elementu klasy bazowej, który zależy od argumentu szablonu
Poniższy kod nie kompiluje się z gcc, ale działa z Visual Studio:
template <typename T> class A {
public:
T foo;
};
template <typename T> class B: public A <T> {
public:
void bar() { cout << foo << endl; }
};
Dostaję błąd:
test.cpp: W funkcji członka „void B :: bar ()”:
test.cpp: 11: error: „foo” nie zostało zadeklarowane w tym zakresie
Ale tak powinno być! Jeśli się zmieniębar
do
void bar() { cout << this->foo << endl; }
potem torobi kompiluj, ale nie sądzę, żebym musiał to robić. Czy w oficjalnych specyfikacjach C ++ jest coś, co GCC śledzi tutaj, czy jest to tylko dziwactwo?