In the alternatives section of the proposal, I touched on the issue of @autoclosure. I continue to think that it&#39;s (to borrow Will&#39;s phrasing above) &#39;too clever&#39;, in that use of the attribute for the express purpose of discarding the closure is unprecedented in the standard library, and in that it may violate user expectations that `a(b(c))` generally entails invoking both b(_:) and a(_:).<br><br>IMO, the core team&#39;s original rationale for having a generic enum rather than generic functions is sound, and I think I&#39;ve come around to sharing Dave&#39;s opinion that ofValue and non-ofValue facilities should distinguish themselves from each other as much as possible to avoid confusion about their behavior when the argument is T.self vs. T.Type.<br><br>In the alternatives section, I&#39;ve also included a sketch of an argument for why having duplicative API for non-ofValue facilities might be less than preferable.<br><div class="gmail_quote"><div dir="ltr">On Tue, Aug 9, 2016 at 12:57 Erica Sadun &lt;<a href="mailto:erica@ericasadun.com">erica@ericasadun.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">I&#39;m fine with the proposal if it suits the core team / stdlib requirements for reasons previously stated. <div><br></div><div>Some questions: Under SE-0136, the calls would be `MemoryLayout&lt;<i>Int</i>&gt;.size` and `MemoryLayout.size(ofValue: <i>2</i>)`, with T inferred from the `size(ofValue:)` argument type.</div><div><br></div><div>* Will it benefit the compiler to use autoclosure as previously discussed to avoid evaluation? Or is that unnecessary?</div><div>* With some list members requesting a single namespaced set of functions that align with the original version of 101, is there any advantage to adopting the following non-generic enum design?<div><div><br></div><div><div style="margin:0px;line-height:normal;font-family:Menlo;font-size:13px"><span style="color:#bb2ca2">public enum</span><span> MemoryLayout {</span></div><div style="margin:0px;line-height:normal;font-family:Menlo;font-size:13px"><span>    </span><span style="color:rgb(187,44,162)">public</span><span style="color:rgb(187,44,162)"> </span><span style="color:rgb(187,44,162)">static</span><span> </span><span style="color:rgb(187,44,162)">func</span><span> size&lt;T&gt;(ofValue _: </span><span style="color:rgb(79,129,135)">T</span><span>) -&gt; </span><span style="color:rgb(112,61,170)">Int</span><span> { ... }</span></div><div style="margin:0px;line-height:normal;font-family:Menlo;font-size:13px"><span>    </span><span style="color:rgb(187,44,162)">public</span><span style="color:rgb(187,44,162)"> </span><span style="color:rgb(187,44,162)">static</span><span> </span><span style="color:rgb(187,44,162)">func</span><span> stride&lt;T&gt;(ofValue _: </span><span style="color:rgb(79,129,135)">T</span><span>) -&gt; </span><span style="color:rgb(112,61,170)">Int</span><span> { ... }</span></div><div style="margin:0px;line-height:normal;font-family:Menlo;font-size:13px"><span>    </span><span style="color:rgb(187,44,162)">public</span><span style="color:rgb(187,44,162)"> </span><span style="color:rgb(187,44,162)">static</span><span> </span><span style="color:rgb(187,44,162)">func</span><span> alignment&lt;T&gt;(ofValue _: </span><span style="color:rgb(79,129,135)">T</span><span>) -&gt; </span><span style="color:rgb(112,61,170)">Int</span><span> { ... }</span></div><div style="margin:0px;line-height:normal;font-family:Menlo;font-size:13px"><span>    </span><span style="color:rgb(187,44,162)">public</span><span style="color:rgb(187,44,162)"> </span><span style="color:rgb(187,44,162)">static</span><span> </span><span style="color:rgb(187,44,162)">func</span><span> size&lt;T&gt;(of _: </span><span style="color:rgb(79,129,135)">T</span><span>.Type) -&gt; </span><span style="color:rgb(112,61,170)">Int</span><span> { ... }</span></div><div style="margin:0px;line-height:normal;font-family:Menlo;font-size:13px"><span>    </span><span style="color:rgb(187,44,162)">public</span><span style="color:rgb(187,44,162)"> </span><span style="color:rgb(187,44,162)">static</span><span> </span><span style="color:rgb(187,44,162)">func</span><span> stride&lt;T&gt;(of _: </span><span style="color:rgb(79,129,135)">T</span><span>.Type) -&gt; </span><span style="color:rgb(112,61,170)">Int</span><span> { ... }</span></div><div style="margin:0px;line-height:normal;font-family:Menlo;font-size:13px"><span>    </span><span style="color:rgb(187,44,162)">public</span><span style="color:rgb(187,44,162)"> </span><span style="color:rgb(187,44,162)">static</span><span> </span><span style="color:rgb(187,44,162)">func</span><span> alignment&lt;T&gt;(of _: </span><span style="color:rgb(79,129,135)">T</span><span>.Type) -&gt; </span><span style="color:rgb(112,61,170)">Int</span><span> { ... }</span></div><div style="margin:0px;line-height:normal;font-family:Menlo;font-size:13px"><span>}</span></div><div><div><br></div><div>* If not, should the remaining 3 functions be added to `MemoryLayout&lt;T&gt;` as a courtesy for those who feel it reads better?</div></div></div></div></div></div><div style="word-wrap:break-word"><div><div><div><div><div><br></div><div>-- E</div></div></div></div></div></div><div style="word-wrap:break-word"><div><div><div><div><div><br></div><div><div><blockquote type="cite"><div>On Aug 7, 2016, at 12:18 PM, Dave Abrahams via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; wrote:</div><br><div><div>Hello Swift community,<br><br>The review of &quot;SE-0136: Memory Layout of Values&quot; begins now and runs<br>through August 9th. Apologies for the short review period, but we are<br>running up against the Swift 3 deadline. The proposal is available here:<br><br><span style="white-space:pre-wrap">        </span><a href="https://github.com/apple/swift-evolution/blob/master/proposals/0136-memory-layout-of-values.md" target="_blank">https://github.com/apple/swift-evolution/blob/master/proposals/0136-memory-layout-of-values.md</a><br><br>Reviews are an important part of the Swift evolution process. All<br>reviews should be sent to the swift-evolution<br>mailing list at<br><br><span style="white-space:pre-wrap">        </span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br><br>or, if you would like to keep your feedback private, directly to the review manager.<br><br>What goes into a review?<br><br>The goal of the review process is to improve the proposal under review<br>through constructive criticism and contribute to the direction of<br>Swift. When writing your review, here are some questions you might<br>want to answer in your review:<br><br><span style="white-space:pre-wrap">        </span>* What is your evaluation of the proposal?<br><span style="white-space:pre-wrap">        </span>* Is the problem being addressed significant enough to warrant a<br>          change to Swift?<br><span style="white-space:pre-wrap">        </span>* Does this proposal fit well with the feel and direction of<br>          Swift?<br><span style="white-space:pre-wrap">        </span>* If you have used other languages or libraries with a similar <br>          feature, how do you feel that this proposal compares to those?<br><span style="white-space:pre-wrap">        </span>* How much effort did you put into your review? A glance, a<br>          quick reading, or an in-depth study?<br><br>More information about the Swift evolution process is available at<br><br><span style="white-space:pre-wrap">        </span><a href="https://github.com/apple/swift-evolution/blob/master/process.md" target="_blank">https://github.com/apple/swift-evolution/blob/master/process.md</a><br><br>Thank you,<br><br>Dave Abrahams<br>Review Manager<br>_______________________________________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br></div></div></blockquote></div><br></div></div></div></div></div></div></blockquote></div>