GCC-Problem: Verwenden eines Mitglieds einer Basisklasse, die von einem Vorlagenargument abhängt

Der folgende Code wird nicht mit gcc kompiliert, aber mit Visual Studio:

template <typename T> class A {
public:
    T foo;
};

template <typename T> class B: public A <T> {
public:
    void bar() { cout << foo << endl; }
};

Ich erhalte den Fehler:

test.cpp: In der Member-Funktion "void B :: bar ()":

test.cpp: 11: Fehler: "foo" wurde in diesem Bereich nicht deklariert

Aber es sollte sein! Wenn ich mich änderebar zu

void bar() { cout << this->foo << endl; }

dann estut kompilieren, aber ich glaube nicht, dass ich das tun muss. Gibt es etwas in den offiziellen Spezifikationen von C ++, dem GCC hier folgt, oder ist es nur eine Eigenart?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage