Допустимо ли псевдоним массива char через указатель на int?
Я знаю, что в стандарте явно разрешено следующее:
int n = 0;
char *ptr = (char *) &n;
cout << *ptr;
Как насчет этого?
alignas(int) char storage[sizeof(int)];
int *ptr = (int *) &storage[0];
*ptr = 0;
cout << *ptr;
По сути, я спрашиваю, допускают ли правила псевдонимов последовательность символов, доступную через указатель на другой тип. Я хотел бы, чтобы ссылки на части стандарта, которые указывают так или иначе, если это возможно.
Некоторые части стандарта оставили меня в противоречии; (3.10.10), кажется, указывает на то, что поведение будет неопределенным при условии, что динамический типstorage
не являетсяint
, Однако определение динамического типа мне неясно, и существованиеstd::aligned_storage
приведет меня к мысли, что этоявляется возможный.