Я пытаюсь реализовать 16-байтовое выравнивание простого статического массива, используя шаблон std::aligned_storage:
#include <type_traits>
int main()
{
const size_t SIZE = 8;
using float_16 = std::aligned_storage<sizeof(float) * SIZE, 16>::type;
float_16 mas;
new(&mas) float[SIZE];//Placement new. Is this necessary?
mas[0]=1.f;//Compile error while attempting to set elements of aligned array
}
Я получаю следующую ошибку компиляции:
нет совпадений для «operator[]» в «mas[0]»
Затем я попытался использовать явное приведение указателя:
float* mas_ = reinterpret_cast<float*>(mas);
но это также приводит к ошибке компиляции:
недопустимое приведение типа «float_16 {aka std::aligned_storage‹32u, 16u>::type}» к типу «float*»
Может ли кто-нибудь предложить мне, как правильно выровнять статический массив с помощью std::aligned_storage?
new
? - person avakar   schedule 05.09.2013new
, не имеют расширенного выравнивания. - person R. Martinho Fernandes   schedule 05.09.2013