From 2c2ab10958e27ced276c9906f18a67c1eddd1928 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sun, 16 Mar 2014 21:37:51 +0100 Subject: Fix of t0786: view bounds Previously, only implicit method types were eligible as views. This is too strict, as it rules out view bounds. We now also consider types that derive from Function1. The reason for not allowing any type is that this would cause us to check many more types for applicability when an implicit view is searched. --- tests/pos/t0786.scala | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 tests/pos/t0786.scala (limited to 'tests/pos/t0786.scala') diff --git a/tests/pos/t0786.scala b/tests/pos/t0786.scala new file mode 100644 index 000000000..b320de0ed --- /dev/null +++ b/tests/pos/t0786.scala @@ -0,0 +1,29 @@ +object ImplicitProblem { + class M[T] + + def nullval[T] = null.asInstanceOf[T]; + + trait Rep[T] { + def eval: Int + } + + implicit def toRep0(n: Int): Rep[Int] = new Rep[Int] { + def eval = 0 + } + + implicit def toRepN[T](n: M[T])(implicit f: T => Rep[T]): Rep[M[T]] = new Rep[M[T]] { + def eval = f(nullval[T]).eval + 1 + } + + def depth[T](n: T)(implicit ev: T => Rep[T]) = n.eval + + def main(args: Array[String]): Unit = { + println(depth(nullval[M[Int]])) // (1) this works + println(nullval[M[Int]].eval) // (2) this works + + type m = M[Int] + println(depth(nullval[m])) // (3) this doesn't compile on 2.7.RC1 + println(nullval[m].eval) // (4) this works + } + +} -- cgit v1.2.3