inline fun foo(x : R, block : (R) -> T) : T { var y = x var z = y z = x return block(z) } fun bar() { foo(1) { x -> x } foo(1f) { x -> x } foo(1L) { x -> x } foo(1.toDouble()) { x -> x } foo(1.toShort()) { x -> x } foo(1.toByte()) { x -> x } foo('a') { x -> x } foo(true) { x -> x } } // 0 valueOf // 0 Value\s\(\)