// !CHECK_TYPE // !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER class Outer { inner class Inner { fun foo() = this fun baz(): Inner = this } fun bar() = Inner() fun set(inner: Inner) {} } fun factoryString(): Outer.Inner = null!! fun infer(x: T): Outer.Inner = null!! val inferred = infer("") fun main() { val outer = Outer() checkSubtype.Inner>(outer.bar()) checkSubtype.Inner>(outer.Inner()) checkSubtype.Inner>(outer.bar()) checkSubtype.Inner>(outer.Inner()) checkSubtype.Inner>(outer.bar()) checkSubtype.Inner>(outer.Inner()) outer.set(outer.bar()) outer.set(outer.Inner()) val x: Outer.Inner = factoryString() outer.set(x) val y: Outer.Inner = infer("") outer.set(y) outer.set(infer("")) }