<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=""><br class=""><div><blockquote type="cite" class=""><div class="">On 11 Oct 2016, at 08:49, Benjamin Spratling &lt;<a href="mailto:bspratling@mac.com" class="">bspratling@mac.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Howdy,<div class="">The error message is not saying that aFunction throws, it says “??" might throw. &nbsp;After all, you supplied a ()rethrows-&gt;(Int) to it as its second argument, which is wrapping a ()throws-&gt;Int, “bFunction()"</div><div class="">?? and &amp;&amp; and || wrap the trailing expression in an @autoclosure.</div><div class=""><div class=""><br class=""></div><div class="">I am a little surprised two “try” are not required. &nbsp;This would be my expectation:</div><div class=""><blockquote type="cite" class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><blockquote class="" style="margin: 0px 0px 0px 40px; border: none; padding: 0px;"><div class=""><font face="Courier" class="">let&nbsp;value = try&nbsp;aFunction() ?? try bFunction()</font></div></blockquote></div></blockquote><div class="">but, using try to the right of a non-assignment operator is not allowed.</div><div class=""><br class=""></div>This, however, is not disallowed:</div><div class=""><br class=""></div><div class="">let&nbsp;value =&nbsp;try&nbsp;aFunction() ?? (try&nbsp;bFunction())</div><div class=""><div class=""><br class=""></div><div class="">The purpose of the @autoclosure is to make developers forget they need to write a closure, and it apparently worked for you.</div><div class=""><br class=""></div><div class="">-Ben Spratling</div><div class=""><br class=""></div></div></div></div></div></blockquote></div><br class=""><div class="">Yeah, I understand the reason for it, but I still think we should change it so you write the ‘try’ before the part which actually throws. Perhaps the rule should be something more general around rethrowing autoclosures?</div><div class=""><br class=""></div><div class="">After all, I thought that was the entire point of the ‘try’ keyword. The compiler doesn't really need it (it already knows what throws and what doesn’t), but it helps humans to mark where the throwing stuff happens.</div><div class=""><br class=""></div><div class="">Karl</div></body></html>