Рассмотрим следующий фрагмент:
#include <iostream>
union U{
U(): i(1) {}
int i;
int j = 2; // this default member initializer is ignored by the compiler
};
U u;
int main(){
std::cout << u.i << '\n';
std::cout << u.j << '\n';
}
Код печатает (см. живой пример):
1
1
Где в стандарте говорится, что инициализатор элемента по умолчанию для члена U::j
игнорируется компилятором?
Обратите внимание, что объединение ниже не компилируется, и это нормально в соответствии с [class.union.anon]/4. Таким образом, я ожидал, что фрагмент выше также не компилируется.
Смотрите живой пример:
union U{
int i = 1;
int j = 2;
};