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