File: t4786.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 (24 lines) | stat: -rw-r--r-- 909 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
trait Matrix[@specialized A, Repr[C] <: Matrix[C, Repr]] { // crash goes away if @specialize is removed
  def duplicate(mb: MatrixBuilder[A, Repr]): Repr[A] = {
    mb.zeros
  }
}
trait DenseMatrix[@specialized A] extends Matrix[A, DenseMatrix]
trait DenseMatrixFlt extends DenseMatrix[Float]

trait MatrixBuilder[@specialized A, Repr[C] <: Matrix[C, Repr]] {
  def zeros: Repr[A]
}
object DenseFloatBuilder extends MatrixBuilder[Float, DenseMatrix] {
  val zeros = new Object with DenseMatrixFlt
  // Note:
  // - in 2.9 crash goes away if the explicit type "DenseMatrixFlt" is assigned to "zeros"
  // - in 2.9 crash goes away if DenseMatrixFlt is a class instead of a trait:
  //        val zeros = new DenseMatrixFlt
}

object Test extends App {
  val m1 = DenseFloatBuilder.zeros // in 2.9 crash goes away if explicit type "DenseMatrixFlt" is assigned to m1
  val m2 = m1.duplicate(DenseFloatBuilder)
}