Que signifie typenameT::typePerso en argument de fonction + SFINAE
Bonjour !
J'essaye de comprendre SFINAE et j'ai pris le code donné en exemple typique
Code:
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;
} |
Je suis pas loin d'avoir compris mais j'ai deux questions
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 ! =)