5

此代码按预期工作:

void f() noexcept {}

但以下失败并在 GCC 4.7.2 中出现错误:

auto f() -> void noexcept {}

// error: expected initializer before ‘noexcept’

我读过的文章没有提到无法noexcept在训练返回类型中指定。这是一个错误(并且已在最新版本的 GCC 中修复)?还是标准明确禁止这样做?

4

1 回答 1

12

这不是正确的语法。它应该是:

auto f() noexcept -> void { }

根据 C++11 标准的第 8.4.1/2 段:

D1(参数声明子句) cv-qualifier-seq(opt)

ref-qualifier(opt) *exception-specification(opt)* attribute-specifier-seq(opt) *trailing-return-type(opt)*

如 8.3.5 所述。一个函数只能在命名空间或类范围内定义。

于 2013-05-16T22:10:22.013 回答