Je pensais que lorsqu'on instanciais une classe template, toutes les fonctions membres (et non membres) de cette classe etaient alors declarees.
Mais cela n'est visiblement pas le cas avec le code suivant ou la fonction membre "constraints" de la classe "IsDerivedFrom" comporte une erreur qui n'est pas vue a la compil alors qu'un objet de type "IsDerivedFrom" est bien cree :
Voila, ma question est simple, pourquoi l'erreur dans la fonction constraints n'est pas detectee a la compil alors qu'un objet de type Widget (qui derive de IsDerivedFrom) est bien instancie ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 class Base {}; class Derivee : public Base {}; template <typename D, typename B> class IsDerivedFrom { private: void constraints(D* p); protected: IsDerivedFrom() {} }; template <typename D, typename B> void IsDerivedFrom<D, B>::constraints(D* p) { B* pb(p); pb = 1; // erreur non detectee a la compil ... } template <typename T> class Widget : public IsDerivedFrom<T, Base> {}; int main() { Widget<Derivee> w; }
Partager