interface B { val bar: T } class S(val value: String) { fun bar() = value fun foo(): B { val p = S("OK"); return object : B { //we shouldn't capture this@S in such case override val bar: String = p.bar() } } } fun box(): String { return S("fail").foo().bar } // 0 this$0