On 2010-09-23 16:24:20 -0400, Tomek Sowiński <j...@ask.me> said:

Michel Fortin napisał:

The interesting thing with this change is that you can now call
mutators functions on the local variables inside the pure function,
because those can be made pure. You can't even iterate over a range
inside a pure function without this!

pure int test() {
    int result;
    auto r = iota(0, 10);
    while (!r.empty) {
        result += r;
        r.popFront(); // can't be pure by current rules!
    }
    return result;
}

It's because popFront() can't be made pure. It could be if there was @tail immutable in the language -- pure functions would mark their arguments with @tail immutable instead of
immutable. That allows popFront() to advance the range.

I know popFront() can't be made pure by the current rules. The proposal that started this thread is to relax 'pure' so that popFront() can be made pure. I was simply pointing a use case for that.

And to tell the truth, I have no idea where a tail-immutable qualifier would be helpful in this situation... could you elaborate?


--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/

Reply via email to