// !LANGUAGE: +DefinitelyNonNullableTypes import kotlin.reflect.KProperty1 class Mem class Ext class Foo { fun foo(prop: KProperty1): Mem = Mem() } fun Foo.bar(prop: KProperty1): Ext = Ext() class Bar { fun bar(prop: KProperty1): Mem = Mem() } fun Bar.bar(prop: KProperty1): Ext = Ext() class Baz { fun baz(prop: KProperty1): Mem = Mem() } fun Baz.baz(prop: KProperty1): Ext = Ext() fun id(t: T): T = t fun main() { val r01: Mem = Foo().foo(String::length) val r02: Mem = Foo().foo(id(String::length)) val r03: Ext = Foo().bar(String::length) val r04: Ext = Foo().bar(id(String::length)) val r05: Mem = Bar().bar(String::length) val r06: Mem = Bar().bar(id(String::length)) val r07 = Baz().baz(String::length) val r08: Ext = Baz().baz(id(String::length)) }