<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="">Definitely a +1 from me for the feature.</div><div class=""><br class=""></div><div class="">What are the name lookup issues? Do you mean cases where an operator for Foo == Foo exists in more than one location? Personally I’d just stick with what we have now, i.e- treat operator implementations within a specific class/struct as being globally defined anyway and throw an error if the same signature is declared more than once.</div><div class=""><br class=""></div><div class="">One minor issue around putting them in class/struct bodies though is that I wonder if perhaps a keyword other than func should be used? While they are functions, they aren’t methods of instances. At the very least they should probably need to be static.</div><br class=""><div><blockquote type="cite" class=""><div class="">On 31 Jan 2016, at 05:26, Chris Lattner 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 style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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=""><blockquote type="cite" class=""><div class=""><br class="Apple-interchange-newline">On Jan 30, 2016, at 9:03 PM, Vanderlei Martinelli 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 dir="ltr" class="">Since the first public betas I’d like to know why operator implementation have to be written outside the body of its owner.</div></div></blockquote><div class=""><br class=""></div><div class="">Yep, this is a generally desirable feature (at least for symmetric operators). &nbsp;This would also be great to get dynamic dispatch of operators within class declarations. &nbsp;I don’t think we have a firm proposal nailing down how name lookup works with this though.</div><div class=""><br class=""></div><div class="">-Chris</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">Take as example the code:</div><div class=""><br class=""></div><div class=""><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);"><span class="" style="color: rgb(116, 137, 31);">protocol</span><span class="Apple-converted-space">&nbsp;</span>MyEquatable {</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(116, 137, 31);"><span class="" style="color: rgb(80, 111, 116);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span></span>@warn_unused_result</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(116, 137, 31);">func</span><span class="Apple-converted-space">&nbsp;</span>==(lhs:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(215, 96, 27);">Self</span>, rhs:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(215, 96, 27);">Self</span>) -&gt;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(251, 153, 3);">Bool</span></div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">}</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116); min-height: 17px;"><br class=""></div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);"><span class="" style="color: rgb(116, 137, 31);">struct</span><span class="Apple-converted-space">&nbsp;</span>MyStruct:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(18, 101, 182);">MyEquatable</span><span class="Apple-converted-space">&nbsp;</span>{</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(116, 137, 31);">let</span><span class="Apple-converted-space">&nbsp;</span>foo:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(251, 153, 3);">String</span></div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(116, 137, 31);">let</span><span class="Apple-converted-space">&nbsp;</span>bar:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(251, 153, 3);">String</span></div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">}</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116); min-height: 17px;"><br class=""></div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);"><span class="" style="color: rgb(116, 137, 31);">func</span><span class="Apple-converted-space">&nbsp;</span>==(lhs:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(255, 147, 0);">MyStruct</span>, rhs:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(255, 147, 0);">MyStruct</span>) -&gt;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(251, 153, 3);">Bool</span><span class="Apple-converted-space">&nbsp;</span>{</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(116, 137, 31);">return</span><span class="Apple-converted-space">&nbsp;</span>lhs.<span class="" style="color: rgb(14, 123, 195);">foo</span><span class="Apple-converted-space">&nbsp;</span>== rhs.<span class="" style="color: rgb(14, 123, 195);">foo</span><span class="Apple-converted-space">&nbsp;</span>&amp;&amp; lhs.<span class="" style="color: rgb(14, 123, 195);">bar</span><span class="Apple-converted-space">&nbsp;</span>== rhs.<span class="" style="color: rgb(14, 123, 195);">bar</span></div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">}</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116); min-height: 17px;"><br class=""></div></div><div class="">Why we cannot write:</div><div class=""><br class=""></div><div class=""><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);"><span class="" style="color: rgb(116, 137, 31);">protocol</span><span class="Apple-converted-space">&nbsp;</span>MyEquatable {</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(116, 137, 31);"><span class="" style="color: rgb(80, 111, 116);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span></span>@warn_unused_result</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(116, 137, 31);">func</span><span class="Apple-converted-space">&nbsp;</span>==(lhs:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(215, 96, 27);">Self</span>, rhs:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(215, 96, 27);">Self</span>) -&gt;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(251, 153, 3);">Bool</span></div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">}</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116); min-height: 17px;"><br class=""></div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);"><span class="" style="color: rgb(116, 137, 31);">struct</span><span class="Apple-converted-space">&nbsp;</span>MyStruct:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(18, 101, 182);">MyEquatable</span><span class="Apple-converted-space">&nbsp;</span>{</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(116, 137, 31);">let</span><span class="Apple-converted-space">&nbsp;</span>foo:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(251, 153, 3);">String</span></div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(116, 137, 31);">let</span><span class="Apple-converted-space">&nbsp;</span>bar:<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(251, 153, 3);">String</span></div><div style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116); min-height: 17px;" class="">&nbsp;&nbsp; &nbsp;<br class="webkit-block-placeholder"></div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">&nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(116, 137, 31);">func</span><span class="Apple-converted-space">&nbsp;</span>==(lhs:&nbsp;<span class="" style="color: rgb(255, 147, 0);">MyStruct</span>, rhs:&nbsp;<span class="" style="color: rgb(255, 147, 0);">MyStruct</span>) -&gt; Bool {</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">&nbsp; &nbsp; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><span class="" style="color: rgb(116, 137, 31);">return</span><span class="Apple-converted-space">&nbsp;</span>lhs.foo == rhs.foo &amp;&amp; lhs.bar == rhs.bar</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">&nbsp; &nbsp; }</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116); min-height: 17px;"><br class=""></div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116);">}</div><div class="" style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Input Mono'; color: rgb(80, 111, 116); min-height: 17px;"><br class=""></div></div><div class="">Any thoughts?</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">-Van</div><div class=""><br class=""></div></div>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></div></blockquote></div><br class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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;"><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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; float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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; float: none; display: inline !important;" class="">swift-evolution mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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=""><a href="mailto:swift-evolution@swift.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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="">swift-evolution@swift.org</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 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="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></div></blockquote></div><br class=""></body></html>