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
这就是您按预期得到错误的代码。那么当你不希望这个问题的焦点时,你怎么样呢? –