История изменений
Исправление monk, (текущая версия) :
Аргумент «это же херотень какая-то, в этом нет смысла, как это реализовывать?» не принимается, потому что «конкретизируйте ваши претензии, пожалуйста».
То есть пример конвертации double*
в (struct {int; char; double})*
никто не привёл? Очень странно.
Я всегда думал, что такие ловушки только в законодательстве попадаются (иначе юристам и бухгалтерам будут намного меньше платить). Но даже в законодательстве на любую неоднозначность есть статья-разъяснение какого-нибудь уважаемого юриста «законодатель имел в виду …, поэтому статью закона … надо трактовать как …».
P.S. Нашёл трактовку: https://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule
Исходная версия monk, :
Аргумент «это же херотень какая-то, в этом нет смысла, как это реализовывать?» не принимается, потому что «конкретизируйте ваши претензии, пожалуйста».
То есть пример конвертации double*
в (struct {int; char; double})*
никто не привёл? Очень странно.
Я всегда думал, что такие ловушки только в законодательстве попадаются (иначе юристам и бухгалтерам будут намного меньше платить). Но даже в законодательстве на любую неоднозначность есть статья-разъяснение какого-нибудь уважаемого юриста «законодатель имел в виду …, поэтому статью закона … надо трактовать как …».
А здесь просто реализация. Кстати, в фактической трактовке просто разрешено указатель на что угодно приводить к указателю на что угодно. double*
в (struct {int;})*
прекрасно кастуется без предупреждений в любом компиляторе от gcc и clang до tcc и msvc.