Почему компилятор С++ не может распознать, что g()
и b
являются наследуемыми членами Superclass
, как показано в этом коде:
template<typename T> struct Superclass {
protected:
int b;
void g() {}
};
template<typename T> struct Subclass : public Superclass<T> {
void f() {
g(); // compiler error: uncategorized
b = 3; // compiler error: unrecognized
}
};
Если я упрощаю Subclass
и просто наследую от Subclass<int>
, тогда он компилируется. Он также компилируется при полной квалификации g()
как Superclass<T>::g()
и Superclass<T>::b
. Я использую LLVM GCC 4.2.
Примечание. Если я делаю g()
и b
общедоступными в суперклассе, он все равно терпит неудачу с той же ошибкой.