diff options
Diffstat (limited to 'test/files/neg/tcpoly_typealias.scala')
-rw-r--r-- | test/files/neg/tcpoly_typealias.scala | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/test/files/neg/tcpoly_typealias.scala b/test/files/neg/tcpoly_typealias.scala new file mode 100644 index 0000000000..6c7f80cc0b --- /dev/null +++ b/test/files/neg/tcpoly_typealias.scala @@ -0,0 +1,47 @@ +trait A { + type m[+x] +} + +trait A2 { + type m[+x <: String] +} + +trait A3 { + type m[x] +} + +trait FooCov[+x] +trait FooCon[-x] +trait FooBound[+x <: String] + +trait BOk1 extends A { + type m[+x] = FooCov[x] +} + +trait BOk2 extends A2 { + type m[+x <: String] = FooBound[x] +} + +trait BOk3 extends A2 { + type m[+x] = FooCov[x] // weaker bound +} + +trait BOk4 extends A3 { + type m[+x] = FooCov[x] // weaker variance +} + +// there are two aspects to check: + // does type alias signature (not considering RHS) correspond to abstract type member in super class + // does RHS correspond to the type alias sig +trait BInv extends A{ + type m[x] = FooCov[x] // error: invariant x in alias def +} + +trait BCon extends A{ + type m[-x] = FooCon[x] // error: contravariant x +} + +trait BBound extends A{ + type m[+x <: String] = FooBound[x] // error: x with stricter bound +} + |