this() immutable
H. S. Teoh
hsteoh at quickfur.ath.cx
Wed Oct 16 14:10:02 PDT 2013
On Wed, Oct 16, 2013 at 10:09:50PM +0200, Daniel Davidson wrote:
[...]
> I reported my issue with the `chain` function to this NG and tried
> to start annotating items used by chain with pure to see how far the
> thread led. Honestly it was quickly clear that it led too far for me
> to follow it and someone else indicated the problem had to do with
> Voldermort types. If there is more I could do to "benefit us all",
> beyond learning how it works and what to avoid in my own code - I
> will be glad to try.
Hmm. I just did a quick-n-dirty change to Phobos, and it seems to make
chain() usable with pure code. I'm not sure why the compiler didn't
infer pure for it -- it should. (Or perhaps I'm missing something
obvious -- I didn't run the Phobos unittest so maybe the following
change breaks something.)
- In the Phobos source, edit std/range.d and look for the function `auto
chain(Ranges...)(Ranges rs)` (around line 2022 or thereabouts), then
the struct Result inside this function.
- Find the ctor for this struct (circa line 2074), and annotate it with
pure.
- Now the following code compiles:
import std.range;
auto pureFunc() pure {
return chain([1,2,3], [2,3,4]);
}
void main() {
auto r = pureFunc();
}
This is just a hack, of course. The compiler *should* be able to
correctly infer that the ctor is pure. So the real fix is to find out
why the compiler isn't doing that.
T
--
Leather is waterproof. Ever see a cow with an umbrella?
More information about the Digitalmars-d-learn
mailing list