<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Tue, May 17, 2016 at 9:03 PM Brent Royal-Gordon via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I&#39;m in favor, with one small concern:<br>
<br>
&gt; Then, the protocol author is responsible for providing a generic global trampoline operator that is constrained by the protocol type and delegates to the static operator on that type:<br>
&gt;<br>
&gt;       func == &lt;T: Equatable&gt;(lhs: T, rhs: T) -&gt; Bool {<br>
&gt;         return T.==(lhs, rhs)<br>
&gt;       }<br>
<br>
This trampoline operator, and all of the others in the proposal, appears to be 100% pure boilerplate. Could Swift generate them for us?<span style="line-height:1.5"> </span><br></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
(Specifically, I&#39;m suggesting that if protocol P defines a `static func $!(args) -&gt; ret`, Swift should automatically generate a global `func #! &lt;T: P&gt; (args) -&gt; ret`, substituting `T` for any `Self`s among the parameters or return values.)<br></blockquote><div><br></div><div>That was actually part of the original write-up :)  You can see the removed content from the diff here: <a href="https://github.com/apple/swift-evolution/pull/283/commits/841514fbd7d11ce1ab6dad8ee3c6473d6c550789">https://github.com/apple/swift-evolution/pull/283/commits/841514fbd7d11ce1ab6dad8ee3c6473d6c550789</a></div><div><br></div><div>The core team felt that auto-generating the trampolines was too ambitious for the Swift 3 timeline but that the rest of the improvements should not be held up by it. I definitely intend to propose auto-trampolines as a natural follow-up proposal to this (assuming it&#39;s accepted) for Swift 3.x/4.</div><div><br></div></div></div>