<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2016-07-13 15:02 GMT+03:00 Adrian Zubarev via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span>:<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div>

<p>To answer your question, we still need the metatype to access initializer and static member of that type. If we’d drop T.Type completely, we’d lose functionality to do so.</p>

<pre><code>protocol A {
    init()
}

func foo&lt;T : A&gt;(metatype: T.Type) -&gt; T {
    return metatype.init()
}</code></pre></div></div></blockquote><div>In such cases, we can always refer to the type directly:</div><div><pre><code>func foo&lt;T : A&gt;(metatype: Type&lt;T&gt;) -&gt; T {
    return T()
}</code></pre></div><div>I would prefer to remove metatypes T.Type completely and replace them with your somewhat transparent Type&lt;T&gt;.</div></div></div></div>