考虑这个例子,从bug 80985:处理gcc的noexcept类型警告
template <class Func>
void call(Func f)
{
f();
}
void func() noexcept { }
int main()
{
call(func);
}
与所有的警告编译启用此功能,因为你这样做,收益率:
$ g++ -std=c++14 -Wall foo.cxx
foo.cxx:2:6: warning: mangled name for ‘void call(Func) [with Func = void (*)() noexcept]’ will change in C++17 because the exception specification is part of a function type [-Wnoexcept-type]
void call(Func f)
^~~~
正是我应该怎么办有这个警告?什么是修复?
如果'call'完全在您的项目内部,则无关紧要。它只在两个不同的翻译单元使用它的情况下很重要,其中一个是用C++ 17编译的,而另一个不是。即使如此,由于'call'是一个模板函数,除了在最终的可执行文件中有额外的定义之外,它可能不会有太大的影响。 –
@DanielH不是我的意思是说上面的Barry,但是如果你正在用-wError编译一个项目,那么这个“无害的警告”将导致程序根本无法编译,尽管是正确的。这很重要。 – markt1964
@ markt1964在文章中只使用了'-Wall'。如果你用'-Werror'编译或者尝试避免编译错误(这是一个好主意),那么是的,你会遇到问题。可能最好的方法是加入'-Wno-noexcept-type',这取决于具体情况。 –