title: Return type of bitwise operators in C++
body: <p>As I'm implenting templated classes for small math vectors, I encounter one problem.
  For the arithmetic operations, the return type of <code>T1 lhs + T2 rhs</code> is <code>std::common_type&lt;T1, T2&gt;::type.</code>
  But what is the return type for the following (for example T1 signed and T2 unsigned or the contrary, or T1 char and T2 unsigned long long int etc...) :</p>
  
  <pre><code>T1 lhs &amp; T2 rhs ?
  T1 lhs | T2 rhs ?
  T1 lhs ^ T2 rhs ?
  T1 lhs &lt;&lt; T2 rhs ?
  T1 lhs &gt;&gt; T2 rhs ?
  </code></pre>
  
  <p>Thank you very much.</p>