<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"><<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>></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<T : A>(metatype: T.Type) -> 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<T : A>(metatype: Type<T>) -> T {
return T()
}</code></pre></div><div>I would prefer to remove metatypes T.Type completely and replace them with your somewhat transparent Type<T>.</div></div></div></div>