В "Lvalues и rvalues", [basic.lval] (3.10), стандарт С++ содержит список типов, таких как "доступ к сохраненному значению объекта" через glvalue такого типа ( пункт 10). В частности, он говорит:
Если программа пытается получить доступ к сохраненному значению объекта через значение gl другого, чем одно из следующих типов, поведение undefined:
динамический тип объекта,
[некоторые несущественные сведения о CV и подписанные/неподписанные]
тип агрегата или объединения, который включает один из вышеупомянутых типов среди его элементов или нестатических членов данных (включая рекурсивно, элемент или нестатический элемент данных субагрегата или содержащегося объединения),
[еще несколько вещей]
Что именно означает "совокупное" правило? Как получить доступ к хранимому значению объекта через glvalue некоторого общего типа агрегата?!
Я представляю что-то вроде этого:
int a = 10; // my "stored value"
struct Foo { char x; float y; int z; bool w; }; // an aggregate
reinterpret_cast<Foo&>(a).y = 0; // ???
Не делает ли окончательный листинг значение glvalue "совокупного типа, включающего динамический тип a
", и, таким образом, делает это действительным?