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,这让我感到不舒服.我真的希望看到这个问题消失.
您可以通过-Wno-attributes标志来关闭警告。
(这可能是 gcc 中的一个错误?)
它可以通过以下方式与g ++ 4.8.2配合使用:
enum class MyEnum : unsigned int
__attribute__((visibility("default")))
{
One = 1,
Two = 2
};
Run Code Online (Sandbox Code Playgroud)
(更改attribute声明的位置)
| 归档时间: |
|
| 查看次数: |
2671 次 |
| 最近记录: |