aboutsummaryrefslogtreecommitdiff
path: root/tests/pos/t0786.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-03-16 21:37:51 +0100
committerTobias Schlatter <tobias@meisch.ch>2014-03-21 11:24:04 +0100
commit2c2ab10958e27ced276c9906f18a67c1eddd1928 (patch)
tree0582e9750a1f29722d61efe639048d66ff6bbeaa /tests/pos/t0786.scala
parent6436fa67e561442ef2e2d9b99852a50f323ccacc (diff)
downloaddotty-2c2ab10958e27ced276c9906f18a67c1eddd1928.tar.gz
dotty-2c2ab10958e27ced276c9906f18a67c1eddd1928.tar.bz2
dotty-2c2ab10958e27ced276c9906f18a67c1eddd1928.zip
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.
Diffstat (limited to 'tests/pos/t0786.scala')
-rw-r--r--tests/pos/t0786.scala29
1 files changed, 29 insertions, 0 deletions
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
+ }
+
+}