class A[T] class B { def m(a: A[this.type] = new A[this.type]): Unit = { } } class C { def foo(a: Int, b: Int = 0) = 0 def foo() = 0 } object Test { def newB = new B newB.m() val stableB = new B stableB.m() def f: Unit = { println((new C).foo(0)) } }