Разве это не было бы больше фактом, что интегральное продвижение происходит на rvalues?
То есть c1
и c2
являются lvalues. Только результат c1 + c2
является значением.
Таким образом, добавление должно выполняться на символе, что приводит к переполнению, что приводит к 1
.
Но впоследствии это значение типа char
, содержащее значение 1
, будет повышено до int
с сохранением его значения (в C ++). Так что cout
увидит int
и выдаст соответственно.
Если cout
был дан символ, он должен вывести символ со значением ASCII 1
, который не предназначен для печати.