On Monday, February 11, 2013 18:01:53 Dicebot wrote: > On Monday, 11 February 2013 at 16:35:22 UTC, Steven Schveighoffer > > wrote: > > in means "const scope". scope is a no-op, const makes the > > array const, including the pointer length. > > > > 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. > > I know all of this. And I need guarantees that initial slice will > always start at the very same point and will never be consumed by > any part of this function. Thus, I do not need tail const and in > is exactly what I want.
Actually, it sounds like tail-const is _exactly_ what you want. If the function accepts const(string)[], then _nothing_ you do to that parameter will alter the original array, and no deep copies will be performed. Making the whole array const buys you _nothing_. You're just making the local variable const, making it so that you can't use it as a range. It has _zero_ effect on the original array either way. I really don't understand what you're trying to gain by making the whole array const. > But I see no reason why I can't copy > slice pointers to create a new tail const range to consume. > > To sum up: I want to maintain full const for parameter > range/slice but be able to create a tail const range from it > every time I want to actually consume it. Without copying data > itself. If you want a tail-const slice, then just slice it. auto newSlice = orig[]; - Jonathan M Davis