blob: ee606a85f0a49b841a3337d556b125d34b9fdeee [file] [log] [blame]
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Result<T: Any>(val a: T?) {
fun getOrThrow(): T? = a
}
abstract class ResultReceiver<T: Any> {
abstract fun receive(result: Result<T>)
}
fun <T: Any> ResultReceiver(f: (Result<T>) -> Unit): ResultReceiver<T> =
object : ResultReceiver<T>() {
override fun receive(result: Result<T>) {
f(result)
}
}
fun test() {
var invoked = false
val receiver = ResultReceiver<Int> { result ->
val intResult = result.getOrThrow()
invoked = true
}
receiver.receive(Result(42))
if (!invoked) {
throw RuntimeException("Fail")
}
}
fun box(): String {
test()
return "OK"
}