<div dir="ltr"><div><br></div><div>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..</div><div><br></div><div>```</div>protocol Special {}<div><br>func doWithAndReturn&lt;S: Special&gt;(_ special: S) -&gt; S { ... }<br><br>let special: Special = ...<br><br>// &quot;error: Generics parameter &#39;S&#39; could not be inferred&quot;<br>// works fine when &#39;Special&#39; is a class</div><div>let newSpecial: Special = doWithAndReturn(special)<div>```</div></div></div>