title: Type of '?:' if the first operand is a constant expression
body: <p>Consider the following code:</p>
  
  <pre><code>void f(float x)
  {
      x * (true ? 1.f : 0.0);
  }
  </code></pre>
  
  <p>The type of <code>declval(bool) ? declval(float) : declval(double)</code> is <code>double</code> according to the C++ standard [expr.cond].</p>
  
  <p>Does this mean that the above code has to be equivalent to:</p>
  
  <pre><code>void f(float x)
  {
      double(x) * 1.0;
  } 
  </code></pre>
  
  <p>Or is there a statement that allows an optimization in case the first operand of <code>?:</code> is a compile time constant expression ?</p>