Ответ 1
Из стандартов С++ 03 и С++ 0x (Draft N3092):
9.5 Союзы
Объединение может иметь функции-члены (в том числе конструкторы и деструкторы), но не виртуальные (10.3) функции. Объединение не должны иметь базовые классы. Объединение не должны использоваться в качестве базового класса.
Если инициализация объединения с использованием синтаксиса агрегатного инициализатора (U u = { 42 };
) или установка члена впоследствии (U u; u.i = 42;
) не является "проблематичной", инициализация его с помощью конструктора (U u( 42 );
) не является "проблематичной" либо.
Единственный "улов" заключается в том, что вы не можете использовать синтаксис агрегатного инициализатора для объединения, у которого есть определенный пользователем конструктор.