c++ - тип каламбура из указателя без знака char, когда известен базовый тип

Вызывает ли следующая программа какое-либо неопределенное поведение? В частности, нарушает ли это какие-либо строгие правила псевдонимов?

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 говорят, что он не улавливает все случаи.


person user1000039    schedule 10.04.2017    source источник
comment
Это выглядит хорошо. Разным типам char разрешено использовать псевдонимы для других объектов.   -  person Kerrek SB    schedule 10.04.2017
comment
related/dupe/good read: stackoverflow.com/questions/13995748/   -  person NathanOliver    schedule 10.04.2017
comment
Обратите внимание: поскольку единственное, что вы делаете с переинтерпретированным указателем, — это переинтерпретация обратно к исходному типу, у вас гораздо больше гарантий поведения.   -  person    schedule 10.04.2017
comment
@KerrekSB Итак, могу ли я вернуться от указателя типа char к исходному указателю, если я знаю, что такое исходный тип?   -  person user1000039    schedule 10.04.2017
comment
Абсолютно никакого псевдонима в вашем коде не происходит. Вам разрешено привести указатель к указателю на тип символа и обратно к исходному типу. Это не псевдоним. Псевдоним — это когда вы приводите указатель к указателю другого типа и затем разыменовываете этот другой указатель.   -  person n. 1.8e9-where's-my-share m.    schedule 10.04.2017
comment
@ user1000039: Как н.м. говорит, что вы ничего не псевдоним. Вас беспокоит только то, подходит ли char* для обхода других указателей на объекты (как это и есть, см. [basic.compound]p5). Но даже псевдонимы будут в порядке, т.е. доступ к элементам массива char.   -  person Kerrek SB    schedule 10.04.2017
comment
Это не шрифтовой каламбур. Каждый случай каламбура типа должен в некоторой степени зависеть от представления значений.   -  person curiousguy    schedule 11.04.2017