Это вопрос, связанный с сообщением о дефекте 452 стандарта C.Документ N1888 содержит дополнительную информацию об исходной проблеме, но я не могу понять, почему в ней говорится следующее:
Правило действующего типа из 6.5.p6 (правило, описывающее, чтоэффективный тип объекта), по-видимому, не применяется к объекту с временным временем жизни в результате выражения запятой.Как таковой, он, кажется, не имеет эффективного типа. Таким образом, типизирование типов разрешено, по-видимому, разрешено :
long func3() {
union u2 o3 = { .x=42 };
return (0, o3).y;
}
Мой вопрос заключается в том, что делает типизацию типа punning законной, если объект с временным временем жизни создан выражением (0, o3)
не имеет эффективного типа?Я полагаю, что эффективный тип этого объекта был бы уместен, только если бы кто-то попытался получить доступ к его сохраненному значению, используя другой тип, но я не вижу, как это имеет место здесь.