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

时间:2017-05-23 12:18:26

标签: 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
};

如果我在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))这个词,警告就会消失。
  • 对于某些测试用例,此类实际上是可用的。

我无法找到任何有关它的有用描述的网站。

以前有没有人见过它?

1 个答案:

答案 0 :(得分:5)

阅读例如this alignas reference它应放在structunion关键字和结构/联合标记之间。

所以它应该像

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