open class B open class BB interface I interface II { fun bar(): String = "OK" } class CC : I inline fun > test0(a: Any): String = (a as? T != null).toString()[0].toString() class CCC : I, II, B() inline fun test1(a: Any): String where T : I, T : II, T : B { return (a as? T != null).toString()[1].toString() } class CCCC : I, II inline fun test2(a: Any): String where T : I, T : II { return (a as? T != null).toString()[2].toString() } open class BX class CI : I class DB : BX() class CIB : BX(), I inline fun , TC : BX> test3(a: Any): String { val s1 = (a as? TC != null).toString()[3].toString() val s2 = (a as? TI != null).toString()[3].toString() return return s1 + s2 } // KT-47342 object O : II> inline fun > testKt(): II = O as II fun foo(a: Any): String = a.toString() fun box(): String { var result = "" result += foo(test0(Any())) result += foo(test0(CC())) result += foo(test1(Any())) result += foo(test1(CCC())) result += foo(test2(Any())) result += foo(test2(CCCC())) result += foo(test3(Any())) result += foo(test3(CI())) result += foo(test3(DB())) result += foo(test3(CIB())) if (result != "ftarlussseesee") return "FAIL: $result" return foo(testKt().bar()) }