summaryrefslogtreecommitdiff
path: root/test/files/pos/t4692.scala
diff options
context:
space:
mode:
Diffstat (limited to 'test/files/pos/t4692.scala')
-rw-r--r--test/files/pos/t4692.scala27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/files/pos/t4692.scala b/test/files/pos/t4692.scala
new file mode 100644
index 0000000000..409daf2257
--- /dev/null
+++ b/test/files/pos/t4692.scala
@@ -0,0 +1,27 @@
+class TypeAliasVsImplicitTest {
+
+ class For[m[_], a](x: m[a]) {
+ def map[b](y: a => b): m[b] = throw new Error
+ }
+ implicit def toFor[m[_], a](x: m[a]): For[m, a] = new For[m, a](x)
+
+ trait MyList[A]
+
+ def foo(xs: MyList[Int]) = xs.map(x => x) // compiles fine.
+
+ type MyListOfInt = MyList[Int]
+ def bar(xs: MyListOfInt) = xs.map(x => x) // doesn't compile: value map is not a member of TypeAliasVsImplicitTest.this.MyListOfInt
+}
+
+// minimal case -- the bug was in type constructor inference where `xs.type` needed to be widened *and* dealiased
+// in 2.8.1 implicit conversion search started with a widened type, so that combo never came up
+// object Test {
+// class For[m[_], a](x: m[a])
+// def toFor[m[_], a](x: m[a]): For[m, a] = new For[m, a](x)
+//
+// trait MyList[A]
+// type MyListOfInt = MyList[Int]
+//
+// val xs: MyListOfInt = error("")
+// toFor(xs : xs.type)
+// } \ No newline at end of file