Je suis nouveau à SFINAE. J'ai remarqué que:déduction de modèle avec SFINAE en C++
template <typename T> void f(T t) { t.Crash(); } // version 1
void f(...) { } // The sink.
f(1);
template <typename T> void f(const T& t, typename T::iterator* it = nullptr) { } // version 2
void f(...) { } // The sink.
f(1);
dans la version 2, en raison de SFINAE, il ne jetterons aucune erreur, et choisissez l'évier d'ellipse. mais pourquoi à la version 1, le compilateur s'arrêtera et se plaindra?
Est-ce que la SFINAE s'applique uniquement à la signature et non au corps? donc dans la version 1, il préfère la fonction template, mais à quelle étape le compilateur s'arrête-t-il et lance-t-il une erreur?
veuillez expliquer explicitement les étapes de traitement du compilateur concernant la résolution de surcharge de modèle.