【发布时间】:2019-01-29 17:26:41
【问题描述】:
在 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 resp。 fn2 由typedef 引入,但这些函数可能接收的参数。
那么我应该逐字逐句采用 15.4;2,因此我的两个示例都无效吗?还是仅禁止应用于类型定义而我的示例是正确的?
【问题讨论】:
-
您指的是 C++14,但标记为 C++11。为了准确起见,您想要哪个?
-
我指的是 C++14。很抱歉用 C++11 标记它,它从我的手指中滑落。感谢您提及!
标签: c++ c++14 typedef exception-specification