下面的代碼編譯在Visual C++ 2013但不G ++ 4.8.2下:處理的非實例模板函數
template<class T>
int MyFunc(T& t)
{
return static_cast<int>(CCodes::blah);
}
template<>
int MyFunc(float& t)
{
return 0;
}
int main() {
float f = 10.f;
return MyFunc(f);
}
的Visual C++似乎忽略一般模板函數,因爲僅專業化MyFunc<float>
被使用。無論如何,G ++解析了一般函數,並指出CCodes枚舉尚未定義。
這是對的嗎?或者是這個實現定義的?
無論哪種方式,格式錯誤的代碼仍然是格式錯誤的代碼。 –
所以我想我的問題可以重寫:這是畸形的代碼?或者,編譯器是否允許不解析未經實例化的模板定義? – Tom
@Tom如果你寫'return static_cast(CCodes :: blah);'?會發生什麼? –