【发布时间】:2012-11-06 17:01:52
【问题描述】:
考虑:
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'
但是,我能够为 void 函数模板定义 return 语句的原因可能是什么?
这是我的代码:
template <typename = void> void f() {
return 0;
}
// pass
int main() {
}
尽管在返回 void 的函数中可能存在非法的 return 语句,上述代码仍会通过。
【问题讨论】:
-
如果您提供实际测试用例,您将获得 +1。我们不得不猜测您在使用模板
f()做什么和不做什么。 -
@LightnessRacesinOrbit 我更新了。
-
这是您按预期收到错误的代码。当您不,如未预期,即问题的焦点时,怎么样?