Если в вашем классе уже есть член, для которого требуется выравнивание по 64 байта, то класс также будет иметь выравнивание по 64 байта по необходимости.Таким образом, добавление явного alignas(64)
на самом деле ничего не изменит.
Основная проблема здесь в том, что функции выделения (в C ++ 11) требуются только для возврата памяти, выровненной по фундаментальное выравнивание .C ++ 11 оставил его определяемым реализацией независимо от того, поддерживаются ли выровненные типы новыми или нет [expr.new] / 1 .C ++ 17 представил новые расширенные выравнивания и дополнительные функции выделения для решения этой проблемы (если и какие новые расширенные выравнивания поддерживаются, однако, все еще определяется реализацией).
ЕслиВы можете переключиться на компилятор, который поддерживает C ++ 17, скорее всего, ваш код будет просто работать.В противном случае вам, вероятно, придется либо использовать некоторую специфичную для реализации функцию для выделения выровненной памяти, либо просто свернуть собственное решение, например, на основе std :: align и размещения new (что будет работать в C ++ 11тоже) ...