<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2016-07-22 17:32 GMT+03:00 Karl <span dir="ltr">&lt;<a href="mailto:razielim@gmail.com" target="_blank">razielim@gmail.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>I wouldn’t be surprised if there are less than a handful of people outside of the Swift team who understand what .Protocol means. </div><div><br></div><div>Most of us just want to create generic objects based on their conformance to an initialiser in a protocol:</div><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>protocol Constructable {</div><div><span style="white-space:pre-wrap">        </span>init()</div><div>}</div><div><br></div><div>func construct&lt;C:Constructable&gt;() -&gt; C {</div><div><span style="white-space:pre-wrap">        </span>return C()                                               // ERROR</div><div>}</div></blockquote></div></blockquote><div><br></div><div>In your example, there is no problem, because we can disambiguate based on return type:</div><div><br></div><div>let c = construct() as SomeConstrictible</div><div><br></div><div>Metatypes are only really needed, when target type would not appear in the signature otherwise.</div><div>And I kind-of understand the decision of not adding explicit generic function specialization, because otherwise there would be double specialization in generic constructors, like this:</div><div><br></div><div>struct Example&lt;T&gt; {</div><div>    init&lt;U&gt;()</div><div>}</div><div>Example&lt;Int&gt;&lt;Double&gt;</div><div><br></div><div>And that would look awful. If I&#39;m not mistaken, such initializers exist in the standard library.</div></div></div></div>