这个警告意味着什么?
这是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))
这个词,警告就会消失。 我无法找到任何有关它的有用描述的网站。
以前有没有人见过它?
答案 0 :(得分:5)
阅读例如this alignas
reference它应放在struct
或union
关键字和结构/联合标记之间。
所以它应该像
template<class K> struct TTT{
union alignas(alignof(K)) {
// ^^^^^^^^^^^^^^^^^^^
// Note placement
char raw[sizeof(K)];
K rawK;
};
};