A adição de dois caracteres produz int

Eu criei um programa simples e o compilei com o GCC 4.4 / 4.5 da seguinte maneira:

int main ()
{
  char u = 10;
  char x = 'x';
  char i = u + x;

  return 0;
}

g ++ -c -Wconversion a.cpp

E eu tenho o seguinte:

a.cpp: In function ‘int main()’:
a.cpp:5:16: warning: conversion to ‘char’ from ‘int’ may alter its value

O mesmo aviso que recebi para o seguinte código:

  unsigned short u = 10;
  unsigned short x = 0;
  unsigned short i = u + x;

a.cpp: In function ‘int main()’:
a.cpp:5:16: warning: conversion to ‘short unsigned int’ from ‘int’ may alter its value

Alguém poderia me explicar por que a adição de dois caracteres (ou dois shorts não assinados) produz int? É um bug do compilador ou é compatível com o padrão?

Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion