我们有以下代码
int main()
{
void f() throw(int);
f();
return 0;
}
void f() { }
GCC 和 clang 可以很好地编译它。但是,在标准中有这样一段:
n3376 15.4/4
如果函数的任何声明有一个异常规范,该规范不是允许所有异常的 noexcept规范,则该函数的所有声明,包括定义和任何显式特化,都应具有兼容的异常规范。
对于以下示例: gcc - 错误,clang - 警告
void f() throw(int);
int main()
{
f();
return 0;
}
void f() { }
为什么这些片段有区别?谢谢。