title: CS0173 compile error on a ternary with different return types
body: <p>Consider this example:</p>
  
  <pre><code>using System.IO;
  using System;
  
  class A{}
  
  class B : A{}
  class C : A{}
  
  class Program
  {
      static void Main()
      {
          GetSomething1(true);
      }
  
      static A GetSomething1(bool oneOrAnother)
      {
          return oneOrAnother ? new B() : new C(); // throws a compile error
      }
  
      static A GetSomething2(bool oneOrAnother)
      {
          return oneOrAnother ? (A)(new B()) : new C(); // no error
      }
  
      static A GetSomething3(bool oneOrAnother)
      {
          return oneOrAnother ? new B() : (A)(new C()); // no error
      }
  
      static A GetSomething4(bool oneOrAnother)
      {
          return oneOrAnother ? (A)(new B()) : (A)(new C()); // no error
      }
  }
  
  
  </code></pre>
  
  <p>A ternary in GetSomething1 generates </p>
  
  <p><strong>error CS0173: Type of conditional expression cannot be determined because there is no implicit conversion between `B' and `C'</strong></p>
  
  <p>I cannot understand why since both B and C can perfectly be casted to A (they extend from it) and it the further examples it is sufficient to explicitly cast only one of them to get the ternary working</p>