interface I1 { } interface I2 { } operator fun I1.component1(): Int { return 1 } operator fun I2.component2(): String { return "" } fun test(x: I1) { when { x !is I2 -> return Unit } val tmp_0: I1 = x val c1: Int = tmp_0.component1() val c2: String = tmp_0 /*as I2 */.component2() }