<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">You might expect this code to work:</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><span style="font-family: Courier;" class="">func</span><span style="font-family: Courier;" class=""> aFunction() -> </span><span style="font-family: Courier;" class="">Int</span><span style="font-family: Courier;" class="">? </span><span style="font-family: Courier;" class=""> </span><span style="font-family: Courier;" class="">{ </span><span style="font-family: Courier;" class="">return</span><span style="font-family: Courier;" class=""> </span><span style="font-family: Courier;" class="">5 }</span></div><div class=""><font face="Courier" class="">func bFunction() throws -> Int { return 4 }</font></div><div class=""><br class=""></div><div class=""><font face="Courier" class="">let value = aFunction() ?? try bFunction() // ERROR: Operator can throw but expression is not marked with a ‘try'</font></div><div class=""><font face="Courier" class="">print(value)</font></div></blockquote><div class=""><br class=""></div><div class="">Instead, you must put the ‘try’ before the entire expression:</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><font face="Courier" class="">let value = try aFunction() ?? bFunction()</font></div></blockquote><div class=""><br class=""></div><div class="">This is awkward, since aFunction() doesn’t throw.</div><div class="">I propose we change the grammar to allow the first example and disallow the second, consistent with the idea that throwing calls are ‘marked’ by using the try keyword.<br class=""><br class=""></div><div class="">Karl</div></body></html>