title: Addition of two chars produces int
body: <p>I've made a simple program and compiled it with GCC 4.4/4.5 as follows:</p>
  
  <pre><code>int main ()
  {
    char u = 10;
    char x = 'x';
    char i = u + x;
  
    return 0;
  }
  </code></pre>
  
  <p>g++ -c -Wconversion a.cpp</p>
  
  <p>And I've got the following:</p>
  
  <pre><code>a.cpp: In function ‘int main()’:
  a.cpp:5:16: warning: conversion to ‘char’ from ‘int’ may alter its value
  </code></pre>
  
  <p>The same warning I've got for the following code:</p>
  
  <pre><code>  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
  </code></pre>
  
  <p>Could anyone please explain me why addition of two chars (or two unsigned shorts) produces int? 
  Is it a compiler bug or is it standard compliant?</p>
  
  <p>Thanks.</p>