1
我是SFINAE的新手。我注意到:在C++中用SFINAE模板扣除
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);
在第2版
,因爲SFINAE的,它不會引發任何錯誤,並選擇橢圓形水槽。但是爲什麼在版本1中,編譯器會停止並投訴?
SFINAE只適用於簽名而非身體嗎?所以在版本1中,它更喜歡模板函數,但是編譯器在什麼階段停止並拋出錯誤?
請您明確解釋關於模板重載解析的編譯器的處理階段。