История изменений
Исправление alysnix, (текущая версия) :
И дальше что? Какие дополнительные гарантии это может дать? Ведь даже присваивание из «совместимого типа» может уронить программу.
присваивание не может. может уронить чтение и использование, если тип был ошибочно принят за нужный.
размер типа нужен для размещения переменной, построения массива таких переменных, структур с полями такого типа и так далее.
когда компилятор видит union, он вычисляет размер его типа таким образом, чтобы любой перечисленный тип физически разместился в этом union с учетом выравниваний и все такое.
std::max.
там надо брать размер по максимальному типу, да еще с учетом выравниваний. флаг в руки делать это ручками и системно независимо… когда есть union, именно для этого и предназначенный
Исходная версия alysnix, :
И дальше что? Какие дополнительные гарантии это может дать? Ведь даже присваивание из «совместимого типа» может уронить программу.
присваивание не может. может уронить чтение и использование, если тип был ошибочно принят за нужный.
размер типа нужен для размещения переменной, построения массива таких переменных, структур с полями такого типа и так далее.
когда компилятор видит union, он вычисляет размер его типа таким образом, чтобы любой перечисленный тип физически разместился в этом union с учетом выравниваний и все такое.