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

时间:2010-03-17 14:39:10

标签: c++ g++ c++11 compiler-warnings

我一直在为新的C ++ 0x类型安全枚举重构我可怕的C ++类型安全psuedo-enums,因为它们方式更具可读性。无论如何,我在导出的类中使用它们,所以我明确地将它们标记为要导出:

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进行编译,这让我感到不舒服。我真的希望看到这个问题消失。

2 个答案:

答案 0 :(得分:4)

您可以传递-Wno-attributes标志以关闭警告。

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

答案 1 :(得分:4)

以下列方式使用g ++ 4.8.2对我有用:

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

(更改attribute声明的位置)