<div class="gmail_quote">On Mon, Nov 22, 2010 at 1:08 AM, Andrei Alexandrescu <span dir="ltr"><<a href="mailto:SeeWebsiteForEmail@erdani.org">SeeWebsiteForEmail@erdani.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On 11/21/10 11:59 PM, Rainer Deyke wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 11/21/2010 21:56, Andrei Alexandrescu wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 11/21/10 22:09 CST, Rainer Deyke wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br></blockquote></blockquote></blockquote></div><div class="im">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

    - When writing code that uses T[], it is often natural to mix<br>
range-based access and index-based access, with the assumption that both<br>
provide direct access to the same underlying data.  However, with char[]<br>
this assumption is incorrect, as the underlying data is transformed when<br>
viewing the array as a range.  This means that generic code that uses<br>
T[] must take special consideration of char[] or it may unexpectedly<br>
produce incorrect results when T = char.<br>
</blockquote>
<br>
What you're saying is that you write generic code that requires T[], and<br>
then the code itself uses front, popFront, and other range-specific<br>
functions in conjunction with it.<br>
</blockquote>
<br>
No, I'm saying that I write generic code that declares T[] and then<br>
passes it off to a function that operates on ranges, or to a foreach loop.<br>
</blockquote>
<br></div>
A function that operates on ranges would have an appropriate constraint so it would work properly or not at all. foreach works fine with all arrays.</blockquote><div><br></div><div>One gotcha that seems to occur here is this code:</div>
<div>foreach(index, character; someString) assert(someString[index] == character);</div><div><br></div><div>I don't really have much that's meaningful to add to this discussion except to say that it shouldn't be easy to write code like the above. I spent a few hours today figuring out why that wouldn't work.</div>
</div>