interface Tr { fun foo(): String } class DelegateTo : Delegation.ReturnNull(), Tr { override fun foo() = super.foo() } class DelegateFrom : Tr by DelegateTo() { } fun box(): String { try { DelegateFrom().foo() return "Fail: should have been an exception" } catch(e: IllegalStateException) { println(e.message) return "OK" } }