如何消除gcc对C++17特性的警告?

5
我自己编译了gcc 7,以尝试一些新的c++17功能。在构建代码时,我看到数百行警告,说某些特性仅在-std=c++1z(我已经在构建命令行中指定了-std=c++1z,并尝试过gnu++1z)时可用。我想要消除这个警告。当使用clang 4时,有一个选项-Wno-c++1z-extensions,但是gcc不认识这个选项。

4
你能否使用"-std=c++1z"编译? - Vittorio Romeo
2
请注意,如果您的代码使用了c++17特性,则需要使用c++17编译器。您可以通过指定“-std=c++1z”来实现。仅为了消除“警告”而这样做并不是正确的方法 - 将一个语言的编译器应用于另一种语言,并告诉编译器对于它不理解的所有内容都保持沉默是一个坏主意。 - skyking
1
@skyking 你是什么意思?我使用的是gcc7,一个c++17编译器,并且在构建命令行中已经指定了-std=c++1z,但警告还是没有消失吗? - Bill Yan
@MatteoItalia,你的评估是正确的。这是因为cmake覆盖了我的-std=c++1z设置。 - Bill Yan
根据你的说法,你应用了-std=c++14,这可能使得gcc成为一个c++14编译器。但是,不建议使用此设置来抑制警告,而应该使用正确的语言设置。 - skyking
显示剩余4条评论
2个回答

7
我已经找到了问题的根本原因。
这是因为我在使用cmake时设置了-std=c++17,并且还包含了Qt5。Qt5的设置覆盖了我的-std=c++17。通过使用make VERBOSE=1,我可以看到同时出现了-std=c++17和-std=c++14。
这使编译器感到困惑。
这个问题与https://gitlab.kitware.com/cmake/cmake/issues/16468有关。

遇到了同样的问题,只想补充一下,这通常发生在您使用不同值两次指定-std标志时,而不仅仅是与QT相关。我猜它会解析其中较小的值。 - Dado

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接