On Monday, February 11, 2013 11:35:22 Steven Schveighoffer wrote: > in means "const scope". scope is a no-op, const makes the array const, > including the pointer length.
I would point out that that may change in the future. scope is supposed to stop references escaping in general but is only partially implemented (currently only for delegates - and I'm not even sure that it's fully implemented there). That being the case, using scope or in on an array could have a major effect on what you can do with it in the future (e.g. returning a slice of it would become illegal), which is one reason why I pretty much always tell people never to use in. Too many people take a liking to in on the theory that it's the opposite of out, but it hides the fact that scope is involved, and a lot of code is going to break once scope is fully implemented. in is one thing that I would _love_ to have eliminated from the language, but it's a carryover from D1 that was badly translated to D2. > const(T)[] means, the ELEMENTS are const, but the pointer and length can > be changed. This makes it a valid input range. > > Since your function is making a copy of the data, this should be fine. > > Your explanation is difficult to understand, I'm basically going on what > your code does. If you change "in string[]" to "const(string)[]", the > function should compile. The const(T)[] cannot alter the original array at all, so I concur with Steven in that the complaints about not wanting to use tail-const make no sense. Maybe this article will help clear things up: http://dlang.org/d-array-article.html - Jonathan M Davis