<div dir="ltr">Yes of course, try my demonstration code yourself.<div>(In the current dev snapshots, -swift-version 4 is the default and -swift-version 3 is what you need to set if you want 3 compability)</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Jun 4, 2017 at 12:37 AM, Ben Rimmington <span dir="ltr">&lt;<a href="mailto:me@benrimmington.com" target="_blank">me@benrimmington.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Are you using the Swift 4 language mode?<br>
<br>
&lt;<a href="https://swift.org/blog/swift-4-0-release-process/#source-compatibility" rel="noreferrer" target="_blank">https://swift.org/blog/swift-<wbr>4-0-release-process/#source-<wbr>compatibility</a>&gt;<br>
<span class="HOEnZb"><font color="#888888"><br>
-- Ben<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
&gt; On 3 Jun 2017, at 23:01, Jens Persson wrote:<br>
&gt;<br>
&gt; I was notified that my SR-2216 and SR-296 had been &quot;fixed as part of implementing SE-0110&quot;.<br>
&gt;<br>
&gt; But AFAICT SE-0110 can&#39;t possibly be fully implemented in dev snapshot 2017-06-02, even though the status of SE-0110 is &quot;Implemented (Swift 4)&quot;.<br>
&gt;<br>
&gt;<br>
&gt; The title of SE-0110 is<br>
&gt; &quot;Distinguish between single-tuple and multiple-argument function types&quot;<br>
&gt;<br>
&gt; Keep that in mind while observing the following demonstration of the (Swift 4) behavior of Developer Snapshot 2017-06-02 (a):<br>
&gt;<br>
&gt; func f(_ a: Int, _ b: Int) { print(&quot;\(a), \(b)&quot;) }<br>
&gt; func g(_ tuple: (Int, Int)) { print(&quot;\(tuple)&quot;) }<br>
&gt; f(1, 2) // 1, 2<br>
&gt; g((1, 2)) // (1, 2)<br>
&gt; // Working as expected.<br>
&gt;<br>
&gt; // But:<br>
&gt; print(type(of: f) == type(of: g)) // true<br>
&gt; // IMHO this is not how to properly<br>
&gt; // &quot;Distinguish between single-tuple and multiple-argument function types&quot;<br>
&gt;<br>
&gt; // And as if that wasn&#39;t enough (pay close attention):<br>
&gt; var (fCopy, gCopy) = (f, g)<br>
&gt; fCopy(1, 2) // 1, 2<br>
&gt; gCopy((1, 2)) // (1, 2)<br>
&gt; swap(&amp;fCopy, &amp;gCopy)<br>
&gt; fCopy(1, 2) // (1, 2)<br>
&gt; gCopy((1, 2)) // 1, 2<br>
&gt; // Crazy!<br>
&gt;<br>
&gt; I&#39;m trying to put this behavior and the following pieces together:<br>
&gt;<br>
&gt; 1. The introdoction from SE-0110:<br>
&gt; &quot;Swift&#39;s type system should properly distinguish between functions that take one tuple argument, and functions that take multiple arguments.&quot;<br>
&gt;<br>
&gt; 2. The status of SE-0110:<br>
&gt; Implemented (Swift 4)<br>
&gt;<br>
&gt; 3. The &quot;fixed as part of implementing SE-0110&quot; notification of my bug reports<br>
&gt; SR-2216: Confusing behavior related to closure types and tuples<br>
&gt; SR-296: Fix inconsistencies related to tuples, arg/param lists, type params, typealiases<br>
&gt;<br>
&gt;<br>
&gt; Perhaps SE-0110 is just not fully implemented in dev snapshot 2017-06-02, but it is implemented somewhere, why else should it get the status &quot;implemented&quot;?<br>
&gt;<br>
&gt; But then I read the following by Vladimir S (one of the SE-0110 authors?):<br>
&gt; <a href="https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170529/036965.html" rel="noreferrer" target="_blank">https://lists.swift.org/<wbr>pipermail/swift-evolution/<wbr>Week-of-Mon-20170529/036965.<wbr>html</a><br>
&gt;<br>
&gt; It&#39;s a very interesting read, and it&#39;s nice to see these old inconsistencies are getting some attention (they deserve all the attention they can get), but I&#39;m still confused.<br>
&gt;<br>
&gt; Is it possible to implement SE-0110 without sorting out the above demonstrated inconsistencies?<br>
&gt;<br>
&gt; Should status of SE-0110 really be &quot;Implemented&quot;?<br>
&gt;<br>
&gt; /Jens<br>
</div></div></blockquote></div><br></div>