// !LANGUAGE: +InlineClasses inline class Result(val a: Any?) { fun getOrThrow(): T = a as T } abstract class ResultReceiver { abstract fun receive(result: Result) } fun ResultReceiver(f: (Result) -> Unit): ResultReceiver = object : ResultReceiver() { override fun receive(result: Result) { f(result) } } fun test() { var invoked = false val receiver = ResultReceiver { result -> val intResult = result.getOrThrow() invoked = true } receiver.receive(Result(42)) if (!invoked) { throw RuntimeException("Fail") } } fun box(): String { test() return "OK" }