第一個階段是編譯模板本身時。在這個階段,編譯器通常不會發現很多錯誤。編譯器可以檢查語法錯誤,例如忘記分號或者變數名拼錯等,但也就這麼多了。
第二個階段是編譯器遇到模板使用時。在此階段,編譯器仍然沒有很多可檢查的。對於函式模板呼叫,編譯器通常會檢查實引數目是否正確。它還能檢查引數型別是否匹配。對於類别範本,編譯器可以檢查使用者是否提供了正確數目的模板實參,但也僅限於此了。
第三個階段是模板例項化時,只有這個階段才能發現型別相關的錯誤。依賴於編譯器如何管理例項化,這類錯誤可能在連結時才報告。
▲ 《C++ Primer》 P582