考慮這個例子,從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',這取決於具體情況。 –