Рассмотрим следующий пример:
template <typename T>
class A {
public:
void f() {
cout << "A::f()\n";
}
};
template<>
class A<int> {
};
template<typename T>
class B: public A<T> {
public:
void g() {
cout << "B::g()\n";
A<T>::f();
}
};
int main() {
B<int> b; // (1)
b.g(); // (2)
return 0;
}
Очевидно, что вызов A :: f () внутри B :: g () не удастся для типа шаблона int. У меня вопрос, в какой момент вызов не удался? На (1) или (2)? Я думал, что это должно быть (1), потому что в этот момент компилятор создает новый класс с типом шаблона int и компилирует его. Эта компиляция должна завершиться ошибкой в f ()?