inline fun foo(x : R?, block : (R?) -> T) : T { return block(x) } fun bar() { foo(1) { x -> x!!.toLong() } foo(1) { x -> x!!.toShort() } foo(1L) { x -> x!!.toByte() } foo(1L) { x -> x!!.toShort() } foo('a') { x -> x!!.toDouble() } foo(1.0) { x -> x!!.toByte() } } // 0 valueOf // 0 Value\s\(\) // 1 I2L // 2 L2I // 2 I2S // 2 I2B // 1 I2D // 1 D2I