fun String.foo(): String? = null fun test(a: String?, b: String?, c: String) = a ?: b?.foo() ?: c // = (a ?: b?.boo()) ?: c // Here 'b?.foo()' returns null, which may break elvis semantics if we fold it carelessly. fun box() = test(null, "abc", "OK")