object Test {
  trait A[X] { type A[x <: X] = x }
  val a = (new A[String]{}): { type A[x <: String] } // ok
  val b = (new A[String]{}): { type A[x] } // not ok
  val c = (new A[String]{}): { type A } // not ok

  val x = (new { type A = String }): { type A[X] } // not ok
//a: AnyRef{type A[X]}

  def f = identity[x.A[Any]] _
}
