Синтаксис alignas / alignof не будет компилироваться в Visual Studio 2017 - PullRequest
0 голосов
/ 10 ноября 2018

Работает раздел кода. Но если я вместо этого использую закомментированную версию,

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 голосов
/ 10 ноября 2018

Это не работает, потому что в C ++ нет механизма, чтобы взять существующий тип, а именно char[sizeof(T)], и создать новый тип, который идентичен за исключением его выравнивания. Если вы объявите datum массивом sizeof(T) char с таким же выравниванием, что и T, тогда тип datum будет все еще char[sizeof(T)]. Спецификация выравнивания может быть присоединена к объявлению члена, но не к типу. Вы не можете сначала присоединить выравнивание к типу, а затем использовать результат этого для объявления члена, как вы, похоже, пытаетесь это сделать.

using StorageType = char[sizeof(T)];
alignas(T) StorageType datum;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...