nit*_*oid 1 c++ anonymous-types clang++
在编译我的项目时,我得到警告匿名联合中声明的匿名类型是扩展名[-Wnested-anon-types].我的代码包含这个联合:
union
{
uint32_t m_bits; // All bits
struct
{
uint32_t significand : 23;
uint32_t exponent : 8;
uint32_t sign : 1;
} IEEE;
};
Run Code Online (Sandbox Code Playgroud)
至于网站上的其他答案已经说过,如果我IEEE从结构中省略了名称,我只会期望这个警告.但目前结构不应该是匿名类型?
因为标准如此说明([class.union.anon]):
注意:无法在匿名联合中声明嵌套类型,匿名联合和函数.
但是,警告的措辞可能会使用一些工作.Clang允许(作为编译器扩展)未命名的嵌套结构和匿名联合*中的其他匿名联合,所以看起来警告的作者只是有点懒惰并且决定"匿名类型"是一个很好的捕获.
请注意,给出union一个名称(因此联合不再是匿名)会使警告消失.
*在匿名联合中仍然不允许使用命名结构(并且没有匿名结构这样的东西)