Как описано в разделе "Включает ли инициализация преобразование lvalue в rvalue"? Является ли int x = x; UB? Стандарт C++ содержит удивительный пример в разделе 3.3.2 Точка объявления, в которой int инициализируется своим собственным неопределенным значением:
int x = 12; { int x = x; }Здесь второй x инициализируется своим собственным (неопределенным) значением. - конец примера]
То, на что Йоханнес отвечает на этот вопрос, является неопределенным поведением, так как требует преобразования lvalue в rvalue.
В последнем C++ 14 проекте стандарта N3936 который можно найти здесь, этот пример был изменен на:
unsigned char x = 12; { unsigned char x = x; }Здесь второй x инициализируется своим собственным (неопределенным) значением. - конец примера]
Изменилось ли что-то в C++ 14 в отношении неопределенных значений и неопределенного поведения, которое послужило причиной этого изменения в примере?