在 C++14 Sec 15.4;2 中声明,...异常规范不应出现在 typedef 声明或别名声明中。
这意味着禁止以下行为:
typedef void (*fn)(int) noexcept;
但是不应该出现的措辞是否意味着令牌noexcept
不能出现在 typedef 声明中的任何地方?
例如,这两者是否也被禁止?
typedef void (*fn1)(void (*)(int) noexcept);
typedef decltype(std::declval<void (*)(int)noexcept>()) fn2;
它们都试图定义一个类型fn1
,并fn2
能够指向一个函数,该函数接受一个指向函数的指针,该函数接受一个int
并且不返回任何内容,同时承诺永远不会抛出异常。
因此,在我的示例中,异常规范不适用于顶级类型fn1
。由这些函数可能接收的参数fn2
引入。typedef
那么我应该逐字逐句采用 15.4;2 吗,因此我的两个示例都无效?还是仅禁止应用于类型定义并且我的示例是正确的?