"the last change" for ranges
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Wed May 20 20:25:30 PDT 2009
dsimcha wrote:
> Please, please, please PLEASE, PRETTY PLEASE FOR THE LOVE OF GOD ALMIGHTY tell me
> you're not serious!!! Isn't changing the interface such that forward ranges are
> no longer effectively a subtype of input ranges a bit drastic? Or do you have
> some magic up your sleeve that, given any forward range, will automatically call
> popFront, and then front, when popNext is called, using extension function hacks
> or something?
Consider:
struct R
{
bool empty();
ref int front();
void popFront();
}
ref int popNext(ref R fwdRange)
{
auto result = & fwdRange.front();
fwdRange.popFront;
return *result;
}
void main()
{
R r;
int x = r.popNext;
}
This should work, I just noticed with surprise it doesn't. It's a bug,
specifically bug 3015:
http://d.puremagic.com/issues/show_bug.cgi?id=3015
> The whole beauty of ranges is that they provide one standard interface to program
> to if all you need is a lowest common denominator level of functionality.
> Frankly, if you destroy this, I think that just enforcing forward vs. input ranges
> purely by convention would be the lesser of two evils.
You and I see eye to eye.
Andrei
More information about the Digitalmars-d
mailing list