void f() {
return 5;
}
以上將引發錯誤。但爲什麼不是這樣?:
template <typename = void> void f() {
return 0;
}
我在用gcc-4.5.1編譯。爲什麼它使用模板有所作爲,使得我不會因爲執行與非模板函數相同的非法返回語句而收到錯誤?我得到的唯一挫折是我不能調用函數(即f()
)沒有得到:
error: return-statement with a value, in function returning 'void'
但儘管如此,這可能是我能夠定義一個return語句爲void函數模板的原因?
這裏是我的代碼:
template <typename = void> void f() {
return 0;
}
// pass
int main() {
}
上面的代碼會通過,儘管在一個功能想必非法return語句返回void。
如果您提供實際的測試用例,您將獲得+1。我們不得不猜測你在做什麼,也沒有在模板f()中做什麼。 –
@LightnessRacesinOrbit我更新了。 – 0x499602D2
這就是您按預期得到錯誤的代碼。那麼當你不希望這個問題的焦點時,你怎麼樣呢? –