On Sunday, July 29, 2012 00:58:59 Dmitry Olshansky wrote: > My solution is make slices different type e.g. BitSlice. > It's always reference to the original BitArray. Array itself still can > be either compact or not. All operations with slice go to array (and > still check if they can use word-aligned speed up). > > How does it sound?
I would point out that while hasSlicing doesn't currently check for it, if opSlice doesn't return a type which is assignable to the original range, it won't work in a lot of Phobos functions. I keep meaning to bring that up for discussion in the main newsgroup. I'd argue that hasSlicing really be changed from enum bool hasSlicing = !isNarrowString!R && is(typeof( (inout int _dummy=0) { R r = void; auto s = r[1 .. 2]; static assert(isInputRange!(typeof(s))); })); to something like enum bool hasSlicing = !isNarrowString!R && is(typeof( (inout int _dummy=0) { R r = void; auto s = r[1 .. 2]; static assert(isInputRange!(typeof(s))); r = s; })); - Jonathan M Davis