簡體   English   中英

gcc - C++ error "declaration changes meaning" - error appears on linux gcc 11.3, but not on msys2 gcc 12.1. 怎么逼呢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM