<div dir="ltr">On Wed, Aug 3, 2016 at 11:32 PM, Dave Abrahams <span dir="ltr">&lt;<a href="mailto:dabrahams@apple.com" target="_blank">dabrahams@apple.com</a>&gt;</span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class=""><br>
on Wed Aug 03 2016, Xiaodi Wu &lt;<a href="http://xiaodi.wu-AT-gmail.com" rel="noreferrer" target="_blank">xiaodi.wu-AT-gmail.com</a>&gt; wrote:<br>
<br>
</span><span class="">&gt; Agreed, but I do think &quot;memory layout of type of my value, size&quot; is a<br>
&gt; mouthful compared to &quot;size of value&quot;.<br>
<br>
</span>It is, but it would avoid confusion.<br>
<span class=""><br>
&gt; Moreover, something doesn&#39;t sit right with me that MemoryLayout&lt;T&gt; and<br>
&gt; MemoryLayout.of(T.self) would be one and the same thing.<br>
<br>
</span>As far as I&#39;m concerned, that&#39;s a feature, not a bug.  Unless you can<br>
describe why it should be different, “it doesn&#39;t sit right” is not a<br>
helpful argument.<br></blockquote><div><br></div><div>Originally, I&#39;d actually half-way typed out a fuller argument, then deleted it, assuming most would find it to be uninteresting due to obviousness. Let&#39;s see:</div><div><br></div><div>Unless I&#39;m mistaken, every place where one might write `MemoryLayout&lt;T&gt;` can be replaced with `MemoryLayout.of(T.self)`. (Yes, I understand that there are places where substituting in the other direction would be unsatisfactory, hence this follow-up thread.) However, I understand it to be a bug, not a feature, to have two different ways of spelling the same thing, because it necessarily brings confusion as to why there must be two of them, and I therefore consider this proposed design to be suboptimal. You titled this thread &quot;MemoryLayout for a value&quot;: I agree that that&#39;s what we need. It ought to be possible to provide facilities for exactly that *without* also providing an entirely duplicative way of spelling MemoryLayout for a type.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">
&gt; Could I suggest an alternative? It&#39;s conservative in that it mimics the<br>
&gt; relationships we had before the proposal was implemented and also maintains<br>
&gt; the simplicity of the caseless enum:<br>
&gt;<br>
&gt; ```<br>
&gt; extension MemoryLayout {<br>
&gt;   static func size(ofValue _: T) -&gt; Int { return MemoryLayout.size }<br>
&gt;   // etc.<br>
&gt; }<br>
&gt; ```<br>
<br>
</span>That introduces even more potential for confusion than adding forwarding<br>
vars to instances does.  Now you&#39;re talking about “overloading” a static<br>
property with a static method having the same base name.<br></blockquote><div><br></div><div>IMO, here&#39;s where it&#39;s a feature, not a bug. I propose `size(ofValue:)` and `size` because they *are* related, just like how `first(where:)` and `first` are related for a Collection. Moreover, the whole thing reads exactly as it should (and, not by accident, nearly identically to this thread&#39;s subject line): &quot;memory layout size of value x&quot;. What is the source of confusion that you think would arise from this pseudo-overloading, and why are you emphasizing the fact that both would be static properties/methods (is it less confusing when it&#39;s not static)?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<span class=""><font color="#888888"><br>
--<br>
-Dave<br>
</font></span></blockquote></div><br></div></div>