c++ - 如何获得有关旧异常规范的警告

标签 c++ c++11 g++4.8 exception-specification

我知道除其他事项外(如 auto_ptr),异常规范已在 C++11 中弃用。

是否有任何方法可以使用以下代码从 g++ 4.8 获取警告?

struct F{
    void foo() throw (int){}
};
int main()
{
}

我已经尝试过 -Wall -pedantic -Wextra -Wdeprecated-declarations,但没有成功。

最佳答案

你可以使用

class __attribute__((deprecated)) old_style_throw_specification;
class old_style_throw_specification {};

#define throw(...) throw(old_style_throw_specification, __VA_ARGS__)

Live example

或者如果你需要支持空抛规范(感谢@John5342 指出这一点),你可以使用

#define throw(...) throw(old_style_throw_specification, ##__VA_ARGS__)

对于宏,但您需要使用 GNU 扩展进行编译:-std=gnu++11 因为上面的 C++11 并不是严格合法的。

Live example

关于c++ - 如何获得有关旧异常规范的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22942734/

相关文章:

c++ - 使用 SFML 的 CLion 项目退出代码 -1073741515

c++ - 为什么我不能将 T* 包装在 std::vector<T> 中?

c++ - 为什么这个递归调用以这种方式工作?

c++ - 将方程的值赋给变量有问题

c++ - 有没有一种有效的方法来确定距离?

c++ - grpc & protobuf -- 错误:std::result_of<> 中没有名为 'type' 的类型

c++ - 初始化原子指针是原子的吗?如果初始化或内存分配抛出会发生什么?

C++ : parentheses ignored when evaluating sequential operators

c++ - std::array 错误:没有名为 'assign' 的成员

c++ - 告诉所有者绘制列表框重绘项目的最佳方式?