summaryrefslogtreecommitdiff
path: root/test/files/run/t10072.scala
blob: 0f1dca1838549f0949182855e7c30fc14e93932e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
trait T[A] {
  def a: A
  def foldLeft[B](zero: B, op: (B, A) => B): B = op(zero, a)
  def sum[B >: A](zero: B): B
}

class C[@specialized(Int) A](val a: A) extends T[A] {
  override def sum[@specialized(Int) B >: A](zero: B): B = foldLeft(zero, (x: B, y: B) => x)
}

object Test extends App {
  def factory[T](a: T): C[T] = new C[T](a)

  assert(new C[Int](1).sum(2) == 2)
  assert(new C[String]("ho").sum("hu") == "hu")
  assert(factory[Int](1).sum(2) == 2)
  assert(factory[String]("ho").sum("hu") == "hu")
}