其他分享
首页 > 其他分享> > c – “C4649:在此上下文中忽略属性”是什么意思?

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

作者:互联网

这个警告意味着什么?

这是mcve.

template<class K> class TTT{
    public: alignas(alignof(K)) 
    union{ 
        char raw[sizeof(K)];        
        K rawK;
    }; //<-- error at this line
};

如果我在Visual Studio 2015中使用ctrl F7编译此单个文件,我将收到此警告.

warning C4649: attributes are ignored in this context
note: see reference to class template instantiation 'TTT<K>' being compiled

我出现在我的电脑中,但http://rextester.com无法重现此警告.

其他信息: –

>注意TTT< K>永远不会真正实例化.
>如果我删除了alignas(alignof(K))这个词,警告就会消失.
>对于某些测试用例,该类实际上是可用的.

我真的找不到任何有关它的有用描述的网站.

有没有人曾经遇到过它?

解决方法:

阅读例如this alignas reference应放在struct或union关键字和structure / union标记之间.

所以应该是这样的

template<class K> struct TTT{
    union alignas(alignof(K)) {
    //    ^^^^^^^^^^^^^^^^^^^
    //    Note placement
        char raw[sizeof(K)];        
        K rawK;
    };
};

标签:c,alignment,c14,visual-c,compiler-warnings
来源: https://codeday.me/bug/20190828/1752114.html