Ich bin neu bei SFINAE. Ich habe bemerkt, dass:Vorlage Abzug mit SFINAE in 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);
in Version 2, wegen SFINAE, es sind keine Störungen werfen, und wählen Sie die Ellipse Waschbecken. aber warum bei Version 1 wird der Compiler stoppen und sich beschweren?
Gilt die SFINAE nur für die Unterschrift und nicht für den Körper? in Version 1 bevorzugt es die Template-Funktion, aber in welchem Stadium stoppt der Compiler und wirft einen Fehler?
Bitte erläutern Sie explizit die Verarbeitungsstufen des Compilers in Bezug auf die Vorlage Überladungsauflösung.