SI-7475 アップキャストするとコンパイル通るようになるのが気持ち悪い

https://github.com/scala/scala/pull/3503
https://groups.google.com/d/topic/scala-internals/h8ztMqw-3Xg/discussion
https://github.com/scalaz/scalaz/pull/645


この場合にアップキャストという言い方が合ってるのかどうか知らないけど。
以下が、Scala2.10以前*1ではコンパイル通るが、2.11ではコンパイルエラーになることになったらしい

class C {
  private def foo = 0
  def test(d: D) = d.foo // fooが呼び出せないというエラー
}

class D extends C

で、以下の様にするとコンパイル通るみたいですが

class C {
  private def foo = 0
  def test(d: D) = (d: C).foo
}

class D extends C

これなんか気持ち悪いんですが、しょうがないのかなぁ。(議論長くて全部読んでない)

Javaではどうなってるんだっけ?と思ったら、Javaも2.11でのScalaと同じ挙動で、コンパイルエラーかな。うーん、そうなのか

*1:もっと詳しく言うと、2.11.0-M8以前