我一直在重構我的C++類型安全僞枚舉的可怕混亂到新的C++ 0x類型安全的枚舉,因爲他們方式更具可讀性。總之,我使用它們導出類,所以我明確地將它們標記要導出:g ++ C++ 0x枚舉類編譯器警告
enum class __attribute__((visibility("default"))) MyEnum : unsigned int
{
One = 1,
Two = 2
};
使用g ++編譯這會產生以下警告:以後類型已經被定義
忽略類型的屬性
這似乎很奇怪,因爲,據我所知,該警告是爲了防止實際的錯誤,如:
class __attribute__((visibility("default"))) MyClass { };
class __attribute__((visibility("hidden"))) MyClass;
當然,我顯然沒有這樣做,因爲我只在enum class
的定義處標記了可見性屬性,我沒有在其他任何地方重新定義或聲明它(我可以用單個文件)。
最終,我不能讓這一點代碼實際上導致問題,除了如果我更改一個值並重新編譯消費者而不重新編譯共享庫,消費者通過新的價值觀和共享圖書館不知道該如何處理它們(儘管我不希望這是首要工作)。
我是否過於迂腐?這可以安全地忽略嗎?我懷疑是這樣,但與此同時,有這個錯誤阻止我編制Werror
,這讓我感到不舒服。我真的很想看到這個問題消失。
我向GCC的Bugzilla報告了這個bug。 – 2010-03-18 01:58:16
@TravisGockel:你能指點我那張票嗎?我已在下面發佈解決方法。 – erenon 2015-01-16 16:51:07
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43407 – vpicaver 2016-01-15 05:31:25