Changes in new versions / Kotlin 2.0

interface Processor {
    fun process() = println("processed")
}

inline fun action(block: () -> Unit) = block()

// *** before: ***
fun runOld(processor: Processor?) {
    action {
        // if (processor != null) processor.process()
        // <- Error: a captured value could change, no smart cast
        processor?.process()
    }
}

// *** in version 2.0: ***
fun run(processor: Processor?) {
    action {
        if (processor != null) {
            processor.process()   // the lambda of an inline function cannot leak,
        }                         // so the check holds
    }
}