// !LANGUAGE: +InlineClasses inline class Name(private val value: String) { fun asValue(): String = value } fun concat(a: Name, b: Name) = a.asValue() + b.asValue() inline class UInt(private val value: Int) { fun asValue(): Int = value } fun box(): String { val o = inlinedRun { Name("O") } val k = notInlinedRun { Name("K") } if (concat(o, k) != "OK") return "fail 1" val a = UInt(1) val one = inlinedRun { a } if (one.asValue() != 1) return "fail 2" val b = UInt(2) val two = notInlinedRun { b } if (two.asValue() != 2) return "fail 3" return "OK" } inline fun inlinedRun(block: () -> R): R = block() fun notInlinedRun(block: () -> R): R = block()