<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, May 2, 2016 at 4:32 PM, Chris Lattner via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><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"><span>On May 2, 2016, at 1:10 PM, Dave Abrahams via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I&#39;d rather have<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; MemoryLayout&lt;T&gt;.size<br>
&gt;&gt;&gt; MemoryLayout&lt;T&gt;.alignment<br>
&gt;&gt;&gt; MemoryLayout&lt;T&gt;.spacing<br>
&gt;&gt;<br>
&gt;&gt; This would be a legit use for &#39;extension Any&#39;. IMO it&#39;d be even better<br>
&gt;&gt; as just T.size, T.alignment, T.spacing.<br>
&gt;<br>
&gt; I very much disagree.  I don&#39;t want to see Array(1..&lt;100).size == 24.<br>
<br>
</span>I agree with Dave here.  Even if these got more verbose names (to avoid confusion with count), it is still unfortunate to pollute code completion for these uncommonly used &quot;operators”.  I’m coming around to agree with Dave’s view that dynamicType should be made into a global function for the same reason.<br></blockquote><div><br></div><div>This feedback has been very edifying. I&#39;ve been playing around a little bit in the IBM Swift Sandbox (it&#39;s what I&#39;ve got handy). I think Dave&#39;s solution is supremely elegant, but I&#39;m not entirely comfortable proposing elimination of `sizeofValue(_:)` and friends; I&#39;ve just got no real-world information about how useful they are or not, and the onus is on the person proposing the change to show why the change is necessary and appropriate. I wouldn&#39;t know where to begin.</div><div><br></div><div>Dave&#39;s suggestion can be bolted onto Swift 2 as follows:</div><div><br></div><div>```</div><div><div>struct MemoryLayout&lt;T&gt; {</div><div>    static var alignment: Int {</div><div>        return alignof(T)</div><div>    }</div><div>    static var size: Int {</div><div>        return sizeof(T)</div><div>    }</div><div>    static var spacing: Int {</div><div>        return strideof(T)</div><div>    }</div><div>    private init() { }</div><div>}</div></div><div>```</div><div><br></div><div>I think, though, that it becomes more confusing to include `sizeofValue(_:)` in this syntax, because it&#39;d be possible to write `MemoryLayout&lt;Base&gt;.size(ofValue: Subclass())`, which is a can of worms. However, we can do this:</div><div><br></div><div>```</div><div><div>struct MemoryLayout {</div><div>    static func alignment&lt;T&gt;(type: T.Type) -&gt; Int {</div><div>        return alignof(type)</div><div>    }</div><div>    static func size&lt;T&gt;(type: T.Type) -&gt; Int {</div><div>        return sizeof(type)</div><div>    }</div><div>    static func spacing&lt;T&gt;(type: T.Type) -&gt; Int {</div><div>        return strideof(type)</div><div>    }</div><div>    static func alignment&lt;T&gt;(value: T) -&gt; Int {</div><div>        return alignofValue(value)</div><div>    }</div><div>    static func size&lt;T&gt;(value: T) -&gt; Int {</div><div>        return sizeofValue(value)</div><div>    }</div><div>    static func spacing&lt;T&gt;(value: T) -&gt; Int {</div><div>        return strideofValue(value)</div><div>    }</div><div>    private init() { }</div><div>}</div></div><div>```</div><div><br></div><div>It&#39;s not up to Dave&#39;s standards of elegance, but it seems acceptable IMO. The preposition, incidentally, has to go because parsing rules (at least in Swift 2) mean `size(Int)` is fine but `size(of: Int)` blows up (it has to be `size(of: Int.self)`). Is there an issue with using overloaded methods instead of unique labels in replacing `sizeof(_:)` and `sizeofValue(_:)`?</div><div><br></div></div></div></div>