On Thursday, 30 May 2013 at 18:09:22 UTC, Jonathan M Davis wrote:
On Thursday, May 30, 2013 20:00:24 Mafi wrote:
What a great release! Great work!

I really like the new langugage changes. One change caught my
attention: #10 "The Template This Parameter now changes the
member function qualifier". Does this mean that const/immutable
ranges can implement a useful opSlice? Like

struct MyRange!T {
T[] data;

MyRange!(ElementType!data) opSlice(this T)() {
return MyRange(data);
}
}

So that given the other range primitves this will work:

const myConstRange = MyRange([5, 6, 7, 8]);
foreach(x; myConstRange) {}

Could this be made work with 2.063?

No, because you still have the fundamental problem that MyRange!T and MyRange! (const T) are different types which potentially have no relation to one another aside from the fact that they were generated by the same template. In the general case, you can't just convert MyRange!T to MyRange!(const T). It only
works with arrays because the compiler understands them.

- Jonathan M Davis

Well I'm aware of the fact that MyRange!T and MyRange!const(T) could be unrelated types. But they're not and the author the range provided a conversion function and called it opSlice(). Foreach shouldn't care if they're related or not, it should just call opSlice().

Reply via email to