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