// !CHECK_TYPE // !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER class Outer { inner class Inner { fun foo() = this fun baz(): Inner = null!! } fun innerFactory(): Outer.Inner = null!! fun bar() = Inner() fun set(inner: Inner) {} fun inside() { innerFactory().checkType { _>() } } } fun factoryString(): Outer.Inner = null!! fun infer(x: T, y: Y): Outer.Inner = null!! val inferred = infer("", 1) 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) }