// WITH_STDLIB inline fun baz(value: T): String = "OK" + value fun test(): String { val f: (Any) -> String = ::baz return f(1) } object Foo { val log = "123" } public inline fun Foo.foo(value: T): String = log + value val test2 = { "OK".let(Foo::foo) } object Bar { val log = "321" public inline fun bar(value: T): String = log + value } val test3 = { "OK".let(Bar::bar) } class C { inline fun qux(value: T): String = "OK" + value } fun test4(): String { val c = C() val cr: (String) -> String = c::qux return cr("456") } inline fun ((Any) -> String).cux(value: T): String = this(value) fun test5(): String { val foo: (Any) -> String = ({ b: Any -> val a: (Any) -> String = ::baz a(b) })::cux return foo(3) } inline fun bak(value1: T, value2: K, value3: S): String = "OK" + value1 + value2 + value3 fun test6(): String { val f: (Any, Int, String) -> String = ::bak return f(1, 37, "joo") } inline fun bal(value1: Array, value2: Array): String = "OK" + value1.joinToString() + value2.joinToString() fun test7(): String { val f: (Array, Array) -> String = ::bal return f(arrayOf("mer", "nas"), arrayOf(73, 37)) } class E public inline fun E.foo(value: T): String = "OK" + value class F { inline fun foo(x: T1, y: T2): Any? = "OK" + x + y } inline fun bam(value1: K?, value2: T?): String = "OK" + value1.toString() + value2.toString() fun test10(): String { val f: (T?, String?) -> String = ::bam return f(null, "abc") } inline fun test11Impl() : String { val f: (T?, String?) -> String = ::bam return f(null, "def") } fun test11() = test11Impl() fun box(): String { val test1 = test() if (test1 != "OK1") return "fail1: $test1" val test2 = test2() if (test2 != "123OK") return "fail2: $test2" val test3 = test3() if (test3 != "321OK") return "fail3: $test3" val test4 = test4() if (test4 != "OK456") return "fail4: $test4" val test5 = test5() if (test5 != "OK3") return "fail5: $test5" val test6 = test6() if (test6 != "OK137joo") return "fail6: $test6" val test7 = test7() if (test7 != "OKmer, nas73, 37") return "fail7: $test7" val test8 = E().foo(56) if (test8 != "OK56") return "fail8: $test8" val test9 = F().foo(65, "hello") if (test9 != "OK65hello") return "fail9: $test9" val test10 = test10() if (test10 != "OKnullabc") return "fail10: $test10" val test11 = test11() if (test11 != "OKnulldef") return "fail11: $test11" return "OK" }