Почему компилятор С++ не может распознать, что 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 общедоступными в суперклассе, он все равно терпит неудачу с той же ошибкой.