C++ 尾随返回类型语法与noexcept说明符一起失败?

C++ 尾随返回类型语法与noexcept说明符一起失败?,c++,c++11,C++,C++11,此代码按预期工作: void f() noexcept {} 但以下操作失败,GCC 4.7.2中出现错误: auto f() -> void noexcept {} // error: expected initializer before ‘noexcept’ 我读过的文章没有提到不能在培训返回类型中指定noexcept。这是一个bug吗(在最新版本的GCC中已经修复了吗)?或者这是标准明确禁止的?这不是正确的语法。应该是: auto f() noexcept -> voi

此代码按预期工作:

void f() noexcept {}
但以下操作失败,GCC 4.7.2中出现错误:

auto f() -> void noexcept {}

// error: expected initializer before ‘noexcept’

我读过的文章没有提到不能在培训返回类型中指定
noexcept
。这是一个bug吗(在最新版本的GCC中已经修复了吗)?或者这是标准明确禁止的?

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

auto f() noexcept -> void { }
根据C++11标准第8.4.1/2段:

D1
(参数声明子句)cv限定符seq(opt)

ref限定符(opt)*异常规范(opt)*属性说明符seq(opt)*尾部返回类型(opt)*

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