title: Why is reflect.runtime.universe.RuntimeClass inferred over Nothing when reflect.runtime.universe._ is present?
body: <p>I've stumbled upon a strange situation where having <code>reflect.runtime.universe._</code> imported causes <code>reflect.runtime.universe.RuntimeClass</code> to be inferred where it seems <code>Nothing</code> would be more appropriate.</p>
  
  <p>Consider this simple method and <code>List</code>:</p>
  
  <pre><code>import scala.reflect.ClassTag
  
  def find[A : ClassTag](l: List[Any]): Option[A] =
      l collectFirst { case a: A =&gt; a }
  
  val list = List(1, "a", false)
  </code></pre>
  
  <p>I can use it to find the first element in the <code>List</code> of some type, and it works well, as expected.</p>
  
  <pre><code>scala&gt; find[String](list)
  res1: Option[String] = Some(a)
  
  scala&gt; find[Long](list)
  res2: Option[Long] = None
  </code></pre>
  
  <p>If I do not supply the type parameter, then <code>A</code> is inferred as <code>Nothing</code>, so I get <code>Option[Nothing]</code>, also as expected.</p>
  
  <pre><code>scala&gt; find(list)
  res3: Option[Nothing] = None
  </code></pre>
  
  <p><em>But</em>, if I <code>import scala.reflect.runtime.universe._</code> and again do not supply the type parameter, <code>A</code> is now inferred as <code>reflect.runtime.universe.RuntimeClass</code> instead of <code>Nothing</code>.</p>
  
  <pre><code>scala&gt; find(list)
  res4: Option[reflect.runtime.universe.RuntimeClass] = None
                  ^ What?
  </code></pre>
  
  <p>This isn't a huge problem, since I can hardly imagine much of a use-case for the <code>find</code> method without supplying the type parameter manually, but why does this happen? The <code>ClassTag</code> seems partially to blame, as removing it once again causes <code>Nothing</code> to be inferred (though completely breaks the method due to erasure). What's going on here?</p>