interface A interface B interface C class C1 : A, C>, B, C class CT1 : A, C> class CK1 : B class CL1 : C class CTK1 : A, C>, B class CTL1 : A, C>, C class CKL1 : B, C class CTKL1 : A, C>, B, C inline fun , K: B, L: C> test1(a: Any): String { val s1 = (a as? T != null).toString()[1].toString() val s2 = (a as? K != null).toString()[1].toString() val s3 = (a as? L != null).toString()[1].toString() return s1 + s2 + s3 } class C2 : A, B, C class CT2 : A, C> class CK2 : B class CL2 : C class CTK2 : A, C>, B class CTL2 : A, C>, C class CKL2 : B, C class CTKL2 : A, C>, B, C inline fun , K: B, L: C> test2(a: Any): String { val s1 = (a as? T != null).toString()[2].toString() val s2 = (a as? K != null).toString()[2].toString() val s3 = (a as? L != null).toString()[2].toString() return s1 + s2 + s3 } fun box(): String { var result = "" result += test1, C>(Any()) result += test1, C>(CT1()) result += test1, C>(CK1()) result += test1, C>(CL1()) result += test1, C>(CTK1()) result += test1, C>(CTL1()) result += test1, C>(CKL1()) result += test1, C>(CTKL1()) if (result != "aaaraaaraaarrrarararrrrr") return "FAIL1: $result" result = "" result += test2(Any()) result += test2(CT2()) result += test2(CK2()) result += test2(CL2()) result += test2(CTK2()) result += test2(CTL2()) result += test2(CKL2()) result += test2(CTKL2()) if (result != "lllulllullluuulululuuuuu") return "FAIL2: $result" return "OK" }