On 9/4/18 9:53 AM, Timoses wrote:
Hey,

I'm fiddling around with ranges a bit and am wondering why save is not callable on a const object:
...
I could imagine that save is not marked as const because it is uncertain whether any indirections are part of the content..? But couldn't the compiler check that?

But you have eliminated any visibility into the range itself -- you stuck it behind an interface.

Could anybody explain what exactly is going on? Is there a reason the `save()` is not working on const objects?

The trivial reason is because the method is not marked const:

https://github.com/dlang/phobos/blob/master/std/range/interfaces.d#L153

The real reason is that given a const interface, everything inside it must be const as well. Making a copy of that makes a const copy, which by definition couldn't be assigned back to the original range (which is likely not const).

At the very least, it should be inout. But in either case, the function needs to be properly marked.

As general advice, I wouldn't expect const to work well with Ranges anyway -- const ranges are useless (you can't iterate them). So not much code is expecting to handle const, including the wrappers that Phobos provides.

-Steve

Reply via email to