<div dir="ltr">Very interesting. Is this likely to be changed in the future (either existentials conforming to their protocols, or `S: Protocol` specifically allowing for existentials)?<div><br></div><div>Also, is this at all related? Another instance of at naive/face value something seeming like it should conform, but not.. </div><div><br></div><div>protocol Special {}</div><div>protocol SubSpecial: Special {}</div><div><br></div><div>let spec: Special.Protocol = Special.self // works</div><div>let subspec: Special.Protocol = SubSpecial.self // doesnt work<br><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 9, 2017 at 7:17 PM, Austin Zheng <span dir="ltr">&lt;<a href="mailto:austinzheng@gmail.com" target="_blank">austinzheng@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">A existential type of some protocol `P`, counterintuitively, doesn&#39;t conform to itself, unless it&#39;s an Objective-C protocol.<br>
<br>
Because `S : Special` means S has to be a type that conforms to the protocol `Special`, and `special` is of the existential type `Special`, the existential type `Special` doesn&#39;t conform to the protocol `Special`, so it can&#39;t be used for `S`.<br>
<br>
Best,<br>
Austin<br>
<div><div class="h5"><br>
&gt; On Aug 9, 2017, at 7:19 AM, Mathew Huusko V via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; Curious what part of generics the below would fall under? This hit me by surprise/makes even non-generic/Self-depending protocols un-interchangeable with classes..<br>
&gt;<br>
&gt; ```<br>
&gt; protocol Special {}<br>
&gt;<br>
&gt; func doWithAndReturn&lt;S: Special&gt;(_ special: S) -&gt; S { ... }<br>
&gt;<br>
&gt; let special: Special = ...<br>
&gt;<br>
&gt; // &quot;error: Generics parameter &#39;S&#39; could not be inferred&quot;<br>
&gt; // works fine when &#39;Special&#39; is a class<br>
&gt; let newSpecial: Special = doWithAndReturn(special)<br>
&gt; ```<br>
</div></div>&gt; ______________________________<wbr>_________________<br>
&gt; swift-evolution mailing list<br>
&gt; <a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-<wbr>evolution</a><br>
<br>
</blockquote></div><br></div>