package namedparams

class C[type Elem, type Value](val elem: Elem) {
  def toVal: Elem = ???
}

class D[type Elem, V](elem: Elem) extends C[Elem, V](elem)

object Test {
  val c = new C[String, String]("A") {
    override def toVal = elem
  }
  val x: c.Elem = c.elem

  val c2: C { type Elem = String } = c

  val c3 = new C[Elem = String, Value = Int]("B")
  val c4 = new C[Elem = String]("C")
  val x2: c2.Elem = c2.elem
}

package namedparams

abstract class C[type Elem, type Value](val elem: Elem) {
  def toVal: Elem = ???
}



object Test {
  val c = new C[String, String]("A") {
    override def toVal = elem
  }
  val x: c.Elem = c.elem

  val c2: C { type Elem = String } = c

  val c3 = new C[Elem = String, Value = Int]("B")
  val c4 = new C[Elem = String]("C")
  val x2: c2.Elem = c2.elem
}

--- 
+++ 
@@ -1,10 +1,10 @@
 package namedparams
 
-abstract class C[type Elem, type Value](val elem: Elem) {
+class C[type Elem, type Value](val elem: Elem) {
   def toVal: Elem = ???
 }
 
-
+class D[type Elem, V](elem: Elem) extends C[Elem, V](elem)
 
 object Test {
   val c = new C[String, String]("A") {
Fix pending test for pickling

There is a before/after difference having to do with the
order in which class declarations show up.
