Вызывает ли следующая программа какое-либо неопределенное поведение? В частности, нарушает ли это какие-либо строгие правила псевдонимов?
void zeroInt(unsigned char *mem) {
*reinterpret_cast<int *>(mem) = 0;
}
int main() {
int value;
zeroInt(reinterpret_cast<unsigned char *>(&value));
return value;
}
Я скомпилировал его с помощью gcc, используя -O2 -Wstrict-aliasing=3
, и он не жаловался, однако документы gcc говорят, что он не улавливает все случаи.
char
разрешено использовать псевдонимы для других объектов. - person Kerrek SB   schedule 10.04.2017char*
для обхода других указателей на объекты (как это и есть, см. [basic.compound]p5). Но даже псевдонимы будут в порядке, т.е. доступ к элементам массива char. - person Kerrek SB   schedule 10.04.2017