pure-ifying my code

Philippe Sigaud philippe.sigaud at gmail.com
Sun Nov 17 01:05:30 PST 2013


I'm trying to put a bit of `pure` and `const`/`immutable` in my 
code, and I'm getting strange error messages.

Namely, I've a pure function, says `foo` that returns 
`std.algorithm.joiner(someValue)`:

import std.algorithm: joiner;
auto foo() pure
{
     // some internal calculation
     // creating `someValue`
     return joiner(someValue);
}

DMD tells me `foo` cannot use the impure `joiner`, due to 
`joiner`'s internal struct (Result) not having pure methods 
(`empty`/`front`/`popFront`).

Now, it seems obvious why these range methods are not pure 
(`popFront`, at least). But I don't use them in my function! I 
just return a lazy range to iterate on other ranges. My own 
function do not mutate anything, it just creates an object. A 
mutable value admittedly, but not one with global state.

I know Phobos is not using `pure` as much as it could right now, 
but I really don't see why it's causing trouble right there.


More information about the Digitalmars-d-learn mailing list