title: What is happening in "? :"? I have no idea about the return type
body: <p>I think <code>((1 ? (int)1 : (unsigned int)2) &gt; -1)</code> results in <code>1</code> (true), but actually it is <code>0</code> (false) in Visual&nbsp;Studio&nbsp;2017.</p>
  
  <p>I think the value of <code>(1 ? (int)1 : (unsigned int)2)</code> should be <code>(int)1</code>, because <code>1 ?</code> is true, and <code>1 &gt; -1</code> would be true.</p>
  
  <p>I don't know the reason why the final result of this expression is false.</p>
  
  <p>When I try casting like <code>((int)(1 ? (int)1 : (unsigned int)2) &gt; -1)</code>, it returns <code>1</code> (true).</p>
  
  <pre><code>signed int test = -1;
  signed int si = 1;
  unsigned int ui = 2;
  
  printf("%d\n", ((1 ? si : ui) &gt; test));
  return 0;
  </code></pre>
  
  <p>I expect the output to be <code>1</code>, but the actual output is <code>0</code>.</p>