16

函数类型定义中是否接受 noexcept 说明符?

如:

 typedef void (*fptr)()  noexcept;

直观地说, noexcept 说明符似乎是有意义的,因为它们允许在调用方进行一些优化。

我从 gcc 4.6.1 得到了一个混合的答案。

 typedef void (*fptr)()  noexcept;

导致:错误:使用异常规范声明的“fptr”

但:

template<void (*FPtr)()  noexcept>
struct A{};

编译没有警告。

4

1 回答 1

9

铿锵声给出:

test.cpp:1:25: error: exception specifications are not allowed in typedefs
typedef void (*fptr)()  noexcept;
                        ^
1 error generated.

这在 15.4 [except.spec]/p2 的 C++11 标准中得到了支持:

...异常规范不应出现在 typedef 声明或alias-declaration中。

于 2011-10-26T15:43:15.140 回答