Следующий код не компилируется с помощью 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: В функции-члене void B:: bar():
test.cpp: 11: error: 'foo не был объявлен в этой области
Но это должно быть! Если я изменю bar
на
void bar() { cout << this->foo << endl; }
тогда он компилируется, но я не думаю, что должен это делать. Есть ли что-то в официальных спецификациях С++, которые GCC здесь следует, или это просто причуда?