Comparing ints gives strange results
<p>I'm trying to get my head around usual arithmetic conversions and tried to test:  </p>

<pre><code>(static_cast&lt;unsigned char&gt;(std::numeric_limits&lt;unsigned char&gt;::max()) &gt; static_cast&lt;signed char&gt;(-1))
</code></pre>

<p>this evaluates to true, which is ok, but according to Arithmetic conversion it should result in false (last bullet):  </p>

<blockquote>
  <blockquote>
    <p>Integral promotions are performed on the operands as follows:</p>
  </blockquote>
  
  <p>If either operand is of type unsigned long, the other operand is
  converted to type unsigned long.</p>
  
  <p>If preceding condition not met, and if either operand is of type long
  and the other of type unsigned int, both operands are converted to
  type unsigned long.</p>
  
  <p>If the preceding two conditions are not met, and if either operand is
  of type long, the other operand is converted to type long.</p>
  
  <p>If the preceding three conditions are not met, and if either operand
  is of type unsigned int, the other operand is converted to type
  unsigned int.</p>
  
  <p>If none of the preceding conditions are met, both operands are
  converted to type int.</p>
</blockquote>

<p>The last bullet says that if none of the other conditions are met both operands will be convered to type int. Following this unsigned char(max_char) will have bit pattern filled with ones only and signed char(-1) will have bit patterns filled with ones only. This would mean 1 > 1 == false, yet I'm getting the true. Any thoughts?</p>
