<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 Jan 11, 2016, at 12:39 PM, Jared Sinclair via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div id="bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin: 0px;" class="">Consider the following:</div><div id="bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin: 0px;" class=""><br class=""></div><div id="bloop_customfont" style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin: 0px;" class=""><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">protocol Updatable {</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">&nbsp; &nbsp; func update(state: Bool)</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">}</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class=""><br class=""></font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">class Thing: Updatable {</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">&nbsp; &nbsp; private var enabled = false</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">&nbsp; &nbsp;&nbsp;</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">&nbsp; &nbsp; func update(state: Bool) {</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">&nbsp; &nbsp; &nbsp; &nbsp; self.enabled == state</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">&nbsp; &nbsp; }</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">}</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div><div id="bloop_customfont" style="margin: 0px;" class="">The obvious intention is to set<span class="Apple-converted-space">&nbsp;</span><font color="#9437ff" face="Courier" class="">self.enabled</font><span class="Apple-converted-space">&nbsp;</span>to the incoming value of<span class="Apple-converted-space">&nbsp;</span><font color="#9437ff" face="Courier" class="">state</font>. However, it’s easy to accidentally type a second equals sign. The effect of this typo is&nbsp;<font color="#9437ff" face="Courier" class="">self.enabled</font>&nbsp;is never updated, leading to a run-time bug that could be difficult to diagnose.&nbsp;</div><div id="bloop_customfont" style="margin: 0px;" class=""><br class=""></div><div id="bloop_customfont" style="margin: 0px;" class="">This typo doesn’t generate any errors or warnings. I can’t think of a valid reason to use the equals function outside of comparisons. If the compiler instead treated this typo as an error, the mistake would be trivial to identify and fix:</div></div><div style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class=""></div><div style="font-family: Helvetica, Arial; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">protocol Updatable {</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">&nbsp; &nbsp; func update(state: Bool)</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">}</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class=""><br class=""></font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">class Thing: Updatable {</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">&nbsp; &nbsp; private var enabled = false</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">&nbsp; &nbsp;&nbsp;</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">&nbsp; &nbsp; func update(state: Bool) {</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">&nbsp; &nbsp; &nbsp; &nbsp; self.enabled == state // Error: `==` may not be used outside of comparisons</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">&nbsp; &nbsp; }</font></div><div id="bloop_customfont" style="margin: 0px;" class=""><font face="Courier" color="#9437ff" class="">}</font></div></div></div></blockquote><br class=""></div><div>If it isn't already, the implementation of `==` ought to be marked with the `@warn_unused_result` attribute, which will give you a warning if the result is ignored. We're discussing making warn_unused_result the default behavior in another thread.</div><div><br class=""></div><div>-Joe</div><br class=""></body></html>