Привет. В плюсах стало можно вычислять значение неинициализированного unsigned char:
int f(bool b)
{
int x; // OK: the value of x is indeterminate
int y = x; // undefined behavior
unsigned char c; // OK: the value of c is indeterminate
unsigned char d = c; // OK: the value of d is indeterminate
int e = d; // undefined behavior
return b ? d : 0; // undefined behavior if b is true
}
т.е. этот indeterminate state можно таскать между беззнаковыми чар. Собственно вопросы:
- Если правильно понимаю, то unsigned char’у это разрешили потому что у него нет trap representation. Вопрос - почему нельзя это какое-то валидное число присвоить инту? По идее, это не должно отличаться от char c=something; int i=c, т.к. у чар нет trap representation, и любое его битовое представление является валидным.
- Где можно применить эту столь ограниченную фичу (таскать между char не прикольно как-то)? Если не ошибаюсь, то все функции/операторы сделают type promotion до int, и привет UB.