В данном случае
int
правильно выбран в качестве типа для
result
.
Чтобы разобраться в логике этого поведения, нужно изучить т.н. технику продвижения целочисленных типов -
Integral Promotion.
В выражении
x + y
работает только она.
В частности. Именно продвижение целых подразумевает неявное преобразование булева значения к целому со строго однозначным результатом:
[expr.conv.6].
true
всегда в таких случаях будет преобразован в
1
с типом
int
.
Конкретно для кода
x + y
типом результата значения будет именно
int
, потому что ранг
short int
ниже ранга
int
в правилах продвижения. Арифметические операции с значениями всех типов, чей ранг ниже
int
, всегда подвергаются продвижению и выполняются на значениях с типом
int
.
Дело довершает
auto result
в левой части выражения. Обобщение принимает тип результата выражения справа от знака равенства, коим и является
int
.
Иными словами, все это выражение было отдано на откуп продвижению целочисленных типов.