С++ 11 представил спецификатор alignas
, чтобы указать выравнивание переменной, а alignof
оператора, чтобы запросить выравнивание по умолчанию для типа по умолчанию. Тем не менее, я не вижу никакого способа получить выравнивание определенной переменной. Возьмем следующий тривиальный пример:
alignas(16) float* array;
Вот что мы можем с этим сделать:
-
alignof(float*)
возвращает 8, что явно не то, что мы хотим. -
alignof(array)
возвращает 16, что именно мы хотим, но это расширение компилятора;alignof
, как указано в стандарте, не может использоваться для определенной переменной. -
alignof(decltype(array))
возвращает 8, что было вполне ожидаемым, но не тем, что мы хотим. -
std::alignment_of
реализуется с точки зренияalignof
, поэтому это мало помогает.
Я бы хотел, чтобы механизм подтверждал, что конкретная переменная array
выровнена на границе 16 байтов. Есть ли что-нибудь в стандарте для выполнения такого запроса?