Description
This compiles:
trait Foo { public <T> T bar(def a) { a } } class Bar implements Foo {}
This doesn't:
trait Foo { public <T> T bar(T a) { a } } class Bar implements Foo {}
But this does:
trait Foo<X> { public <T> T bar(T a) { a } } class Bar implements Foo {}
But this doesn't:
trait Foo<X> { public <T> T bar(T a) { a } } class Bar implements Foo<String> {}
This does, though it doesn't make sense:
trait Foo<X> { public <T> T bar(X a) { a } } class Bar implements Foo<String> {}