【发布时间】:2010-03-17 14:39:10
【问题描述】:
我一直在将我糟糕的 C++ 类型安全伪枚举重构为新的 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 进行编译,这让我感到不舒服。我真的很想看到这个问题消失。
【问题讨论】:
标签: c++ g++ c++11 compiler-warnings