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!