summaryrefslogtreecommitdiff
path: root/test/pending/pos/inference.scala
diff options
context:
space:
mode:
Diffstat (limited to 'test/pending/pos/inference.scala')
-rw-r--r--test/pending/pos/inference.scala39
1 files changed, 39 insertions, 0 deletions
diff --git a/test/pending/pos/inference.scala b/test/pending/pos/inference.scala
new file mode 100644
index 0000000000..d28d003435
--- /dev/null
+++ b/test/pending/pos/inference.scala
@@ -0,0 +1,39 @@
+// inference illuminator
+object Test {
+ class D1[T1 : Manifest, T2 <: T1 : Manifest](x: T1) { println(manifest[(T1, T2)]) }
+ class D2[T1 : Manifest, T2 >: T1 : Manifest](x: T1) { println(manifest[(T1, T2)]) }
+ class D3[+T1 : Manifest, T2 <: T1 : Manifest](x: T1) { println(manifest[(T1, T2)]) }
+ class D4[-T1 : Manifest, T2 >: T1 : Manifest](x: T1) { println(manifest[(T1, T2)]) }
+
+ class E1[T1 : Manifest, T2 <: T1 : Manifest](x: D1[T1, T2]) { println(manifest[(T1, T2)]) }
+ class E2[T1 : Manifest, T2 >: T1 : Manifest](x: D2[T1, T2]) { println(manifest[(T1, T2)]) }
+ class E3[+T1 : Manifest, T2 <: T1 : Manifest](x: D3[T1, T2]) { println(manifest[(T1, T2)]) }
+ class E4[-T1 : Manifest, T2 >: T1 : Manifest](x: D4[T1, T2]) { println(manifest[(T1, T2)]) }
+
+ def main(args: Array[String]): Unit = {
+ // WHY YOU NO LIKE NOTHING SO MUCH SCALAC?
+ val d1 = new D1(5)
+ val d2 = new D2(5)
+ val d3 = new D3(5)
+ val d4 = new D4(5)
+
+ new E1(d1) // fails
+ new E2(d2)
+ new E3(d3) // fails
+ new E4(d4)
+ }
+ // found : Test.D1[Int,Nothing]
+ // required: Test.D1[Int,T2]
+ // Note: Nothing <: T2, but class D1 is invariant in type T2.
+ // You may wish to define T2 as +T2 instead. (SLS 4.5)
+ // new E1(d1)
+ // ^
+ // test/pending/pos/inference.scala:22: error: type mismatch;
+ // found : Test.D3[Int,Nothing]
+ // required: Test.D3[Int,T2]
+ // Note: Nothing <: T2, but class D3 is invariant in type T2.
+ // You may wish to define T2 as +T2 instead. (SLS 4.5)
+ // new E3(d3)
+ // ^
+ // two errors found
+}