<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On May 18, 2017, at 7:23 AM, Anders Kierulf &lt;<a href="mailto:anders@smartgo.com" class="">anders@smartgo.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">Thanks for refusing to let your pitch die. Something should eventually be done here and it's good to get feedback. The only reason to bring this up in Swift 4 is if we decide to outlaw some code pattern that's already in use. If this ends up just an additive convenience request, than it can be a bug report for now and come back in Swift 5. There have been a couple +1's already but I don't know whether it's a serious problem or just an annoyance.<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">For me, it’s a serious annoyance. A single wrong `mutating` in an API would be a minor issue, but the problem is that it infects the rest of the code like a plague. It’s bad enough that I’ve delayed work on that project, hoping for a resolution.</span></div></div></blockquote></div><br class=""><div class=""><div class="">Ok. I hear you.</div><div class=""><br class=""></div><div class="">To be clear, the only case that’s really giving you grief is this one right?</div><div class=""><br class=""></div><div class="">&nbsp; func get(_ pointer: UnsafeRawPointer, at index: Int) -&gt; Int</div><div class=""><br class=""></div><div class="">&nbsp; _ = get(letTuple, at: 2) // fails: wrong type</div><div class=""><br class=""></div><div class="">And you don’t want to create a temp copy:</div><div class=""><br class=""></div><div class="">&nbsp; var tupleMemory = letTuple</div><div class="">&nbsp; get(&amp;tupleMemory, at: 2)</div><div class=""><br class=""></div><div class="">In this case, the letTuple-&gt;UnsafeRawPointer conversion is likely going to create that copy anyway in order to give the tuple a memory address. A slightly more compelling example would be:</div><div class=""><br class=""></div><div class="">struct S {</div><div class="">&nbsp; var tuple: (Int, Int, Int, Int, Int, Int)</div><div class="">}</div><div class=""><br class=""></div><div class="">func foo(s: S) -&gt; Int {</div><div class="">&nbsp; var tupleMemory = s.t</div><div class="">&nbsp; return get(&amp;tupleMemory, at: 2) // fails: wrong type</div><div class="">}</div><div class=""><br class=""></div><div class="">Are you more concerned that the copy won't be optimized away or that you need the extra line of code?</div><div class=""><br class=""></div><div class="">… I forgot to mention. Regarding this line:</div><div class=""><br class=""></div><div class="">&nbsp; let a = pointer.bindMemory(to: Int.self, capacity: 6)</div><div class=""><br class=""></div><div class="">If the tuple memory is always viewed as (Int, Int...), then you can use assumeMemoryBound(to:) and don't need to specify capacity.</div></div><div class=""><br class=""></div><div class="">-Andy</div></body></html>