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