Проблема GCC: использование члена базового класса, который зависит от аргумента шаблона

Следующий код не компилируется с gcc, но с Visual Studio:

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

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

Я получаю ошибку:

test.cpp: In member function ‘void B::bar()’:

test.cpp:11: error: ‘foo’ was not declared in this scope

Но так и должно быть! Если я изменюbar в

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

Затем этоdoes компилировать, но я не думаю, что должен это делать. Есть ли в официальных спецификациях C ++ что-то, что GCC следует здесь, или это просто странность?

Ответы на вопрос(5)

Ваш ответ на вопрос