Just a little newbie aha moment I'd like to share.

I was about to post this:

int[] f() {return [1, 2, 3];}

As far as I understand, f returns a fresh array on each call, and therefore, it should be safe to store the result in an immutable variable.

Unfortunately, this fails: immutable v = f();
"Error: cannot implicitly convert expression (f()) of type int[] to immutable(int[])"

I could cast explicitly, of course: auto v = cast(immutable) f();
But can the cast be avoided?

Then it struck me:
The compiler doesn't know that f's return value is unknown to the rest of the world, because f isn't marked pure. And, indeed, make f pure and it just works: int[] f() pure {return [1, 2, 3];} immutable v = f();

Awesome!

Reply via email to