[英]gcc - C++ error "declaration changes meaning" - error appears on linux gcc 11.3, but not on msys2 gcc 12.1. how to force it?
使用此代碼:
enum class profession
{
doctor,
banker
};
class person
{
profession profession;
};
int main()
{
}
在 linux(opensuse 15.4 和 gcc 11.2)上,編譯命令
g++ -std=c++20 -pedantic -Wall -Wextra -Werror=return-type -Wshadow=local -Wempty-body -fdiagnostics-color -s -Os -o program_gpp program.cpp
我得到錯誤:錯誤:'profession person::profession' 的聲明改變了'profession'的含義 [-fpermissive]
在 windows (windows 10 pro, 21h1) / msys2 / mingw-w64 / gcc 12.1 上,編譯命令:
g++ -std=c++20 -pedantic -Wall -Wextra -Werror=return-type -Wshadow=local -Wempty-body -fdiagnostics-color -s -Os program.cpp -o program_gpp.exe
我沒有收到任何警告或錯誤,什么都沒有。
我已經在某個地方發現,也許 gcc 本身是為兩個平台構建了不同的開關,因此它對某些錯誤的敏感性會在它們之間發生變化,這沒關系。 但是由於我希望我的代碼能夠避免這個錯誤並在任何地方編譯,我可以使用哪些 gcc 開關來強制這個錯誤也出現在 windows / msys2 上的 gcc 上? 注意:我不想禁用 linux 上的錯誤(編譯器已經告訴我可以使用 -fpermissive 禁用它),我想要 Z0F4137ED1502B5045D6083AA258B5C42 上的 gcc以便我可以修復它也在 linux 上編譯。
將-fno-ms-extensions
傳遞給 MSYS2 GCC。 這會禁用一些 MSVC 式的擴展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.