<div style="white-space:pre-wrap">That proposal was returned for revision; as far as user ergonomics in Swift 3, .self is going to be a consideration. Best to find a solution that reads nicely regardless of the situation with .self removal.<br></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Jun 2, 2016 at 9:57 AM Matthew Johnson &lt;<a href="mailto:matthew@anandabits.com">matthew@anandabits.com</a>&gt; wrote:<br></div><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><blockquote type="cite"><div>On Jun 2, 2016, at 9:43 AM, Erica Sadun &lt;<a href="mailto:erica@ericasadun.com" target="_blank">erica@ericasadun.com</a>&gt; wrote:</div><br><div><div style="word-wrap:break-word">Supporting Dave A, type-based calls are much more likely to be used than instance calls, unlike with dynamicType/type(of:)<div><br></div><div><table style="border-spacing:0px;border-collapse:collapse;margin-top:0px;margin-bottom:16px;display:block;width:888px;overflow:auto;word-break:keep-all;color:rgb(51,51,51);font-family:&#39;Helvetica Neue&#39;,Helvetica,&#39;Segoe UI&#39;,Arial,freesans,sans-serif,&#39;Apple Color Emoji&#39;,&#39;Segoe UI Emoji&#39;,&#39;Segoe UI Symbol&#39;;font-size:16px;background-color:rgb(255,255,255)"><tbody><tr width="800" style="border-top-width:1px;border-top-style:solid;border-top-color:rgb(204,204,204)"><th width="200" style="padding:6px 13px;border:1px solid rgb(221,221,221)">Term</th><th width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">stdlib search</th><th width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">gist search</th><th width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">Google site:github +swift</th></tr><tr width="800" style="background-color:rgb(248,248,248);border-top-width:1px;border-top-style:solid;border-top-color:rgb(204,204,204)"><td width="200" style="padding:6px 13px;border:1px solid rgb(221,221,221)">sizeof</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">157</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">169</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">4880</td></tr><tr width="800" style="border-top-width:1px;border-top-style:solid;border-top-color:rgb(204,204,204)"><td width="200" style="padding:6px 13px;border:1px solid rgb(221,221,221)">sizeofValue</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">4</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">34</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">584</td></tr><tr width="800" style="background-color:rgb(248,248,248);border-top-width:1px;border-top-style:solid;border-top-color:rgb(204,204,204)"><td width="200" style="padding:6px 13px;border:1px solid rgb(221,221,221)">alignof</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">44</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">11</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">334</td></tr><tr width="800" style="border-top-width:1px;border-top-style:solid;border-top-color:rgb(204,204,204)"><td width="200" style="padding:6px 13px;border:1px solid rgb(221,221,221)">alignofValue</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">5</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">5</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">154</td></tr><tr width="800" style="background-color:rgb(248,248,248);border-top-width:1px;border-top-style:solid;border-top-color:rgb(204,204,204)"><td width="200" style="padding:6px 13px;border:1px solid rgb(221,221,221)">strideof</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">347</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">19</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">347</td></tr><tr width="800" style="border-top-width:1px;border-top-style:solid;border-top-color:rgb(204,204,204)"><td width="200" style="padding:6px 13px;border:1px solid rgb(221,221,221)">strideofValue</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">4</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">5</td><td width="150" style="padding:6px 13px;border:1px solid rgb(221,221,221)">163</td></tr></tbody></table><div>Type-based calls like sizeof() are poor candidates for parameter labels. While it&#39;s acceptable to write sizeof(Int), but one must write size(of: Int.self) (with the trailing self) when the function has a label. </div></div></div></div></blockquote><div><br></div></div></div><div style="word-wrap:break-word"><div><div>Isn’t this a short-term concern?  I thought that requirement was going away.</div></div></div><div style="word-wrap:break-word"><div><br><blockquote type="cite"><div><div style="word-wrap:break-word"><div><div>For this reason, this proposal prefers using no-label calls for types (otherwise they would have been ofType) and labeled calls for values:</div></div><div><br></div><div><pre style="font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;margin-top:0px;margin-bottom:0px;line-height:1.45;word-wrap:normal;padding:16px;overflow:auto;background-color:rgb(247,247,247);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-break:normal;color:rgb(51,51,51)"><span style="color:rgb(0,134,179)">print</span>(<span style="color:rgb(0,134,179)">sizeof</span>(<span style="color:rgb(0,134,179)">Int</span>)) <span style="color:rgb(150,152,150)">// works</span>
<span style="color:rgb(0,134,179)">print</span>(<span style="color:rgb(0,134,179)">sizeof</span>(<span style="color:rgb(0,134,179)">Int</span><span style="color:rgb(167,29,93)">.</span><span style="color:rgb(167,29,93)">self</span>)) <span style="color:rgb(150,152,150)">// works</span>

<span style="color:rgb(167,29,93)">func</span> <span style="color:rgb(121,93,163)">withoutLabel</span>&lt;T&gt;(thetype: T<span style="color:rgb(167,29,93)">.</span><span style="color:rgb(167,29,93)">Type</span>) <span style="color:rgb(167,29,93)">-&gt;</span> <span style="color:rgb(0,134,179)">Int</span> { <span style="color:rgb(167,29,93)">return</span> <span style="color:rgb(0,134,179)">sizeof</span>(T) }
<span style="color:rgb(167,29,93)">func</span> <span style="color:rgb(121,93,163)">withLabel</span>&lt;T&gt;(<span style="color:rgb(121,93,163)">label</span> <span>label</span>: T<span style="color:rgb(167,29,93)">.</span><span style="color:rgb(167,29,93)">Type</span>) <span style="color:rgb(167,29,93)">-&gt;</span> <span style="color:rgb(0,134,179)">Int</span> { <span style="color:rgb(167,29,93)">return</span> <span style="color:rgb(0,134,179)">sizeof</span>(T) }


<span style="color:rgb(150,152,150)">// Works</span>
<span style="color:rgb(0,134,179)">print</span>(withoutLabel(<span style="color:rgb(0,134,179)">Int</span>))

<span style="color:rgb(150,152,150)">// Works</span>
<span style="color:rgb(0,134,179)">print</span>(withLabel(label: <span style="color:rgb(0,134,179)">Int</span><span style="color:rgb(167,29,93)">.</span><span style="color:rgb(167,29,93)">self</span>))

<span style="color:rgb(150,152,150)">// Does not work</span>
<span style="color:rgb(150,152,150)">// error: cannot create a single-element tuple with an element label</span>
<span style="color:rgb(150,152,150)">// print(withLabel(label: Int)) </span></pre><div><br></div></div><div><br></div><div>So with this in mind:</div><div><br></div><div><pre style="font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;margin-top:0px;margin-bottom:16px;line-height:1.45;word-wrap:normal;padding:16px;overflow:auto;background-color:rgb(247,247,247);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;color:rgb(51,51,51)"><code style="font-family:Consolas,&#39;Liberation Mono&#39;,Menlo,Courier,monospace;padding:0px;margin:0px;background-color:transparent;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;word-break:normal;border:0px;display:inline;overflow:visible;line-height:inherit;word-wrap:normal">/// Returns the contiguous memory footprint of `T`.
///
/// Does not include any dynamically-allocated or &quot;remote&quot; storage.
/// In particular, `size(X.self)`, when `X` is a class type, is the
/// same regardless of how many stored properties `X` has.
public func size&lt;T&gt;(_: T.Type) -&gt; Int

/// Returns the contiguous memory footprint of  `T`.
///
/// Does not include any dynamically-allocated or &quot;remote&quot; storage.
/// In particular, `size(of: a)`, when `a` is a class instance, is the
/// same regardless of how many stored properties `a` has.
public func size&lt;T&gt;(of: T) -&gt; Int

/// Returns the least possible interval between distinct instances of
/// `T` in memory.  The result is always positive.
public func spacing&lt;T&gt;(_: T.Type) -&gt; Int

/// Returns the least possible interval between distinct instances of
/// `T` in memory.  The result is always positive.
public func spacing&lt;T&gt;(of: T) -&gt; Int

/// Returns the minimum memory alignment of `T`.
public func alignment&lt;T&gt;(_: T.Type) -&gt; Int

/// Returns the minimum memory alignment of `T`.
public func alignment&lt;T&gt;(of: T) -&gt; Int</code></pre></div><div>-- E</div></div></div></blockquote></div></div></blockquote></div>