g ++ C++ 0x枚举类编译器警告

Tra*_*kel 8 c++ g++ compiler-warnings c++11

我已经重构我的C++类型安全的伪枚举的乌七八糟新的C++ 0x类型安全的枚举,因为他们的方式更具有可读性.无论如何,我在导出的类中使用它们,所以我明确地将它们标记为要导出:

enum class  __attribute__((visibility("default"))) MyEnum : unsigned int
{
    One = 1,
    Two = 2
};
Run Code Online (Sandbox Code Playgroud)

用g ++编译它会产生以下警告:

在已定义类型后忽略类型属性

这看起来很奇怪,因为据我所知,这个警告是为了防止实际的错误,例如:

class __attribute__((visibility("default"))) MyClass { };
class __attribute__((visibility("hidden")))  MyClass;
Run Code Online (Sandbox Code Playgroud)

当然,我显然没有这样做,因为我只在定义中标记了可见性属性,enum class并且我没有在其他任何地方重新定义或声明它(我可以用单个文件复制此错误).

最终,我不能让这些代码实际上导致问题,除了这样的事实,如果我更改一个值并重新编译消费者而不重新编译共享库,则消费者传递新值和共享图书馆不知道如何处理它们(虽然我不希望它首先起作用).

我是不是太迂腐了?这可以安全地忽略吗?我怀疑是这样,但与此同时,有这个错误阻止我编译Werror,这让我感到不舒服.我真的希望看到这个问题消失.

ken*_*ytm 5

您可以通过-Wno-attributes标志来关闭警告。

(这可能是 gcc 中的一个错误?)

  • @TravisGockel:你能给我指一下那张票吗?我在下面发布了一个解决方法。 (3认同)

ere*_*non 5

它可以通过以下方式与g ++ 4.8.2配合使用:

enum class MyEnum : unsigned int
__attribute__((visibility("default")))
{
    One = 1,
    Two = 2
};
Run Code Online (Sandbox Code Playgroud)

(更改attribute声明的位置)