Skip to content

Varargs override with Seq should clash more #12662

Closed
@som-snytt

Description

@som-snytt

Compiler version

3.0.0

Minimized code

  ~ scala
scala> class A { def apply(xs: Int*) = 42 }
// defined class A

scala> class B extends A { def apply(xs: Seq[Int]) = 42 }
1 |class B extends A { def apply(xs: Seq[Int]) = 42 }
  |                        ^
  |                        error overriding method apply in class A of type (xs: Seq[Int]): Int;
  |                          method apply of type (xs: Seq[Int]): Int needs `override` modifier

scala> class B extends A { def apply(xs: Seq[Int]) = "42" }
1 |class B extends A { def apply(xs: Seq[Int]) = "42" }
  |                        ^
  |                        error overriding method apply in class A of type (xs: Seq[Int]): Int;
  |                          method apply of type (xs: Seq[Int]): String needs `override` modifier

scala> class B extends A { override def apply(xs: Seq[Int]) = 17 }
// defined class B

scala> B()(42)
1 |B()(42)
  |    ^^
  |    Found:    (42 : Int)
  |    Required: Seq[Int]

scala> (B(): A)(42)
val res0: Int = 17

Output

// TODO add output here

Expectation

Welcome to Scala 2.13.6 (OpenJDK 64-Bit Server VM, Java 16.0.1).
Type in expressions for evaluation. Or try :help.

scala> class A { def apply(xs: Int*) = 42 }
class A

scala> class B extends A { def apply(xs: Seq[Int]) = 42 }
                               ^
       error: name clash between defined and inherited member:
       def apply(xs: Int*): Int in class A and
       def apply(xs: Seq[Int]): Int at line 1
       have same type after erasure: (xs: Seq): Int

scala>

scala/bug#7052

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions