alignas / alignof语法无法编译Visual Studio 2017

时间:2018-11-10 03:42:56

标签: c++ c++11

这段代码起作用。但是,如果我改用注释掉的版本,

using StorageType = alignas(alignof(T)) char[sizeof(T)];

我遇到错误。

template <typename T> struct minipool {
    union minipool_item {
    private:
        //using StorageType = alignas(alignof(T)) char[sizeof(T)];
        using StorageType = char[sizeof(T)];

        // Points to the next freely available item.
        minipool_item *next;
        // Storage of the item. Note that this is a union
        // so it is shared with the pointer "next" above.
        StorageType datum;
        ....
   };
};

正确的语法是什么?

1 个答案:

答案 0 :(得分:1)

这是行不通的,因为在C ++中,没有机制可以采用现有类型(即char[sizeof(T)])并创建一个除了对齐方式之外完全相同的新类型。如果您将datum声明为sizeof(T) char的数组,并与T对齐,则datum的类型为 still < / em> char[sizeof(T)]。对齐规范可以附加到成员声明,​​但不能附加到类型。您不能先将对齐方式附加到该类型,然后再使用该结果来声明该成员,就像您尝试做的那样。

using StorageType = char[sizeof(T)];
alignas(T) StorageType datum;