История изменений
Исправление SZT, (текущая версия) :
Вообще-то да, это UB https://stackoverflow.com/a/48100169
но обычно это работает. Каст через union (как в Си) делать нельзя - в крестах это тоже UB. Можно через memcpy копировать указатель, если выравнивание там правильное.
Еще есть расширение __attribute__((__may_alias__))
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Type-Attributes.html
Исходная версия SZT, :
Вообще-то да, это UB https://stackoverflow.com/a/48100169
но обычно это работает. Каст через структуру (как в Си) делать нельзя - в крестах это тоже UB. Можно через memcpy копировать указатель, если выравнивание там правильное.
Еще есть расширение __attribute__((__may_alias__))
https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Type-Attributes.html