Проблема 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 следует здесь, или это просто странность?