C++ “是什么意思?”;C4649:在此上下文中忽略属性“;?

C++ “是什么意思?”;C4649:在此上下文中忽略属性“;?,c++,visual-c++,alignment,c++14,compiler-warnings,C++,Visual C++,Alignment,C++14,Compiler Warnings,这个警告是什么意思 这是mcve template<class K> class TTT{ public: alignas(alignof(K)) union{ char raw[sizeof(K)]; K rawK; }; //<-- error at this line }; 我出现在我的计算机中,但无法复制此警告 其他信息:- 请注意,TTT从未真正实例化过 如果我删除单词alignas(al

这个警告是什么意思

这是mcve

template<class K> class TTT{
    public: alignas(alignof(K)) 
    union{ 
        char raw[sizeof(K)];        
        K rawK;
    }; //<-- error at this line
};
我出现在我的计算机中,但无法复制此警告

其他信息:-

  • 请注意,
    TTT
    从未真正实例化过
  • 如果我删除单词
    alignas(alignof(K))
    ,警告将消失
  • 通过一些测试用例,这个类实际上是可用的
我真的找不到任何有关于它的有用描述的网站

以前有人遇到过它吗?

阅读,例如,它应该放在
struct
union
关键字和structure/union标记之间

所以应该是这样的

template<class K> struct TTT{
    union alignas(alignof(K)) {
    //    ^^^^^^^^^^^^^^^^^^^
    //    Note placement
        char raw[sizeof(K)];        
        K rawK;
    };
};
模板结构TTT{
联合校准(校准(K)){
//    ^^^^^^^^^^^^^^^^^^^
//注释位置
生炭[sizeof(K)];
罗克;
};
};

在VS2017中,我得到错误C2024:“alignas”属性仅适用于变量、数据成员和标记类型,这可能是您(假定较旧)的VS版本应该说的,如果它更好地支持
alignas
/
alignof
@Rook有答案的话。我建议你把它贴上去,这样就可以接受了。@Rook谢谢!是的,鲁克有答案!事实上,“某个程序员伙计”已经找到了答案,所以我很高兴我没有匆忙发帖!快速查看可以应用于
union
s,并给出了一个与structs等一起使用的示例@Rook-但是您引用的警告文本显示“和标记类型”。这就是结构/类/联合。不难猜测,不知何故,它应用不当:)
template<class K> struct TTT{
    union alignas(alignof(K)) {
    //    ^^^^^^^^^^^^^^^^^^^
    //    Note placement
        char raw[sizeof(K)];        
        K rawK;
    };
};