不推荐使用动态异常规范

时间:2018-05-09 13:28:56

标签: c++ c++11

我有一些用于编译(和工作)的代码,现在我收到了很多以下警告。这是在我对Ubuntu-Mate进行了一次升级之后发生的。

警告:在C ++ 11中不推荐使用动态异常规范

它发生在简单的行上(在标题中):

    static Value getPriorityValue(const std::string& priorityName)
    throw(std::invalid_argument);

我得到了与此相关的2545警告!反正有没有告诉编译器忽略这个警告?更改代码的最简单方法是什么?

大多数错误都在第三方软件包中,因此我不想对此软件包进行太多修改。

我的编译器中确实有-std = c ++ 11标志。

1 个答案:

答案 0 :(得分:8)

您应该在 1 的任何地方删除或注释掉这些例外规范,例如:

static Value getPriorityValue(const std::string& priorityName);
static Value getPriorityValue(const std::string& priorityName) /* throw(...) */;

您可以使用-Wno-deprecated选项关闭无法编辑代码的地方的折旧警告。我建议仅在编译第三方库时使用它。如果您需要包含引发此类警告的第三方标头,您可以执行 2

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated"
#include "thirdparty.h"
#pragma GCC diagnostic pop

这应该适用于gccclang,并且只会针对特定包含禁用-Wdeprecated

1 动态异常规范自C ++ 11以来已被弃用,并且自C ++ 17以来是非法的,因此您可能希望摆脱它们并升级第三方库正在尽快使用。

2 如果使用-I参数包含这些标头,则可以切换到-isystem以禁用这些标头的所有警告,如{{0}所述。 3}}。另请参阅@Yakk - Adam Nevraumont