File: strip-tvars-for-lubbasetypes.scala

package info (click to toggle)
scala 2.11.12-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 62,924 kB
  • sloc: javascript: 28,808; java: 13,415; xml: 3,135; sh: 1,620; python: 756; makefile: 38; awk: 36; ansic: 6
file content (25 lines) | stat: -rw-r--r-- 538 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
object Test {

  implicit final class EqualOps[T](val x: T) extends AnyVal {
    def ===[T1, Ph >: T <: T1, Ph2 >: Ph <: T1](other: T1): Boolean = x == other
    def !!![T1, Ph2 >: Ph <: T1, Ph >: T <: T1](other: T1): Boolean = x == other
  }

  class A
  class B extends A
  class C extends A

  val a = new A
  val b = new B
  val c = new C

  val x1 = a === b
  val x2 = b === a
  val x3 = b === c // error, infers Object{} for T1
  val x4 = b.===[A, B, B](c)

  val x5 = b !!! c // always compiled due to the order of Ph2 and Ph



}