<html><head></head><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px"><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11090"><span id="yui_3_16_0_ym19_1_1481465591544_11091">I cannot reply directly to this message&nbsp;</span><a href="https://www.mail-archive.com/swift-evolution@swift.org/msg19099.html" id="yui_3_16_0_ym19_1_1481465591544_11092">https://www.mail-archive.com/swift-evolution@swift.org/msg19099.html</a>&nbsp;so I will reply here instead.</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11093"><br id="yui_3_16_0_ym19_1_1481465591544_11094"></div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11095">I am suggesting that both behaviours should be allowed to co-exists (which is already the case, just there is this one exception.)</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11096"><br id="yui_3_16_0_ym19_1_1481465591544_11097"></div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11098">No matter the implications of access level I see this as a matter of consistency as well, at the end of the day an operator is a function with some sugar and a special name.</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11099"><br id="yui_3_16_0_ym19_1_1481465591544_11100"></div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11101">So while I am able to declare a static function as part of a struct/class like so:</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11102"><br id="yui_3_16_0_ym19_1_1481465591544_11103"></div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11104">```<br id="yui_3_16_0_ym19_1_1481465591544_11105"></div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11106">public struct NonEmptyArray&lt;Element&gt; {</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11107"><br id="yui_3_16_0_ym19_1_1481465591544_11108"></div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11109">&nbsp; &nbsp; private var elements: Array&lt;Element&gt;</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11110"><br id="yui_3_16_0_ym19_1_1481465591544_11111"></div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11112">&nbsp; &nbsp; private init(array: [Element]) {</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11113">&nbsp; &nbsp; &nbsp; &nbsp; self.elements = array</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11114">&nbsp; &nbsp; }<br id="yui_3_16_0_ym19_1_1481465591544_11115">&nbsp; &nbsp;&nbsp;</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11116">&nbsp; &nbsp; public static func cons&lt;Element&gt;(lhs: Element, rhs: [Element]) -&gt; NonEmptyArray&lt;Element&gt; {</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11117">&nbsp; &nbsp; &nbsp; &nbsp; return NonEmptyArray&lt;Element&gt;(array: rhs + [lhs])</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11118">&nbsp; &nbsp; }</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11119">```</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11120"><br id="yui_3_16_0_ym19_1_1481465591544_11121"></div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11122">And "fake" the operator by calling the cons function</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11123"><br id="yui_3_16_0_ym19_1_1481465591544_11124"></div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11125">```</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11126">//Overload 1</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11127">public func •|&lt;Element&gt;(lhs: Element, rhs: [Element]) -&gt; NonEmptyArray&lt;Element&gt; {</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11128">&nbsp; &nbsp; return NonEmptyArray.cons(array: rhs + [lhs])</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11129">}</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11130">```</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11131"><br id="yui_3_16_0_ym19_1_1481465591544_11132"></div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11133">It seems to me that the only reason we're currently not allowed to declare the operator directly inside NonEmptyArray is because is begins with some special UTF8 character.</div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11133"><br></div><div id="yui_3_16_0_ym19_1_1481465591544_8472" dir="ltr">If you want to define your overload as free form functions or as static methods on structs/classes it's really up to you.</div><div id="yui_3_16_0_ym19_1_1481465591544_8472" dir="ltr"><br></div><div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_11195">/Tommaso</div> <div class="qtdSeparateBR" id="yui_3_16_0_ym19_1_1481465591544_13328"><br><br></div><div class="yahoo_quoted" id="yui_3_16_0_ym19_1_1481465591544_13332" style="display: block;"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;" id="yui_3_16_0_ym19_1_1481465591544_13331"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;" id="yui_3_16_0_ym19_1_1481465591544_13330"> <div dir="ltr" id="yui_3_16_0_ym19_1_1481465591544_13329"><font size="2" face="Arial" id="yui_3_16_0_ym19_1_1481465591544_13333"> On Sunday, December 11, 2016 1:57 AM, Tommaso Piazza via swift-evolution &lt;swift-evolution@swift.org&gt; wrote:<br></font></div>  <br><br> <div class="y_msg_container" id="yui_3_16_0_ym19_1_1481465591544_13335"><div id="yiv8368497457"><div id="yui_3_16_0_ym19_1_1481465591544_13338"><div style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;" id="yui_3_16_0_ym19_1_1481465591544_13337"><div dir="ltr" id="yiv8368497457yui_3_16_0_ym19_1_1481417388759_3640">Hello,</div><div dir="ltr" id="yiv8368497457yui_3_16_0_ym19_1_1481417388759_3640"><br></div><div dir="ltr" id="yiv8368497457yui_3_16_0_ym19_1_1481417388759_3640">I have written a small proposal that would allow overloads of operators in structs/classes non only based on the types of the operands but on the return type as well.</div><div dir="ltr" id="yiv8368497457yui_3_16_0_ym19_1_1481417388759_3640"><br></div><div dir="ltr" id="yiv8368497457yui_3_16_0_ym19_1_1481417388759_3640">Please let me know you thoughts,</div><div dir="ltr" id="yiv8368497457yui_3_16_0_ym19_1_1481417388759_3640">/Tommaso</div><div dir="ltr" id="yiv8368497457yui_3_16_0_ym19_1_1481417388759_3640"><br></div><div dir="ltr" id="yiv8368497457yui_3_16_0_ym19_1_1481417388759_3640"><a rel="nofollow" target="_blank" href="https://github.com/blender/swift-evolution/blob/proposal/overloads-return-type/NNNN-allow-operator-overloads-in-structs-or-classes-based-on-return-type.md" id="yiv8368497457yui_3_16_0_ym19_1_1481417388759_3639" class="yiv8368497457">https://github.com/blender/swift-evolution/blob/proposal/overloads-return-type/NNNN-allow-operator-overloads-in-structs-or-classes-based-on-return-type.md</a><br></div><div id="yiv8368497457yui_3_16_0_ym19_1_1481417388759_3754"><br></div><div id="yiv8368497457yui_3_16_0_ym19_1_1481417388759_3691"><br></div></div></div></div><br>_______________________________________________<br>swift-evolution mailing list<br><a ymailto="mailto:swift-evolution@swift.org" href="mailto:swift-evolution@swift.org" id="yui_3_16_0_ym19_1_1481465591544_13334">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br><br><br></div>  </div> </div>  </div></div></body></html>