考虑:
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 语句,上述代码仍将通过。