Prenons l'exemple suivant:Pourquoi les appels de fonction aux classes de base modélisées ne fonctionnent-ils pas?
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;
}
Il est évident que l'appel à A :: f() à l'intérieur B :: g() échouera pour le type de modèle int. Ma question est à quel moment l'appel échoue-t-il? À (1) ou (2)? Je pensais que ce devrait être (1) parce qu'à ce stade, le compilateur crée une nouvelle classe avec le type de template int et le compile. Cette compilation devrait échouer dans f() correct?
Quelle est la sortie de main()? – John
@John: Aucun, car la compilation échouera. –
Oh, d'accord. J'étais confus parce que vous parliez de "à quel moment l'appel échoue" - et commente les points dans le code - comme s'il avait été compilé. – John