这个警告是什么意思?

这里是 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 它应该放在 structunion 关键字和结构/union 标签之间。

    所以它应该是这样的

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

    关于c++ - "C4649: attributes are ignored in this context"是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44134633/

    10-13 06:18