Bonjour !
J'essaye de comprendre SFINAE et j'ai pris le code donné en exemple typique
Je suis pas loin d'avoir compris mais j'ai deux questions
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 //On définie une structure Test //Contenant un int personnalisé struct Test { typedef int monInt; }; //On définie une méthode prenant en argument... template <typename T> void f(typename T::monInt) { cout << "Methode 1" << endl; } //Et une autre prenant en argument un template classique template <typename T> void f(T) { cout << "Methode 2" << endl; } int main() { f<Test>(10);//Appelle la méthode 1 f<int>(10);//Appelle la méthode 2 sans erreur grace à SFINAE return 0; }
Que signifie le typename T::monInt en argument de la première f ? Elle attend un nomInt ou c'est autre chose ?
Ensuite, pourquoi ce script devrait-il planter sans SFINAE ? De par le concept de surcharge si un argument ne convient pas à une première déclaration de fonction, le compilateur appelle une autre fonction du même nom avec le bon type d'argument non ?
Merci d'avance ! =)
Partager