On 07/13/2016 08:15 AM, ag0aep6g wrote:
----
struct S { immutable int a; int b; }
immutable(int*) f() pure
{
S* s = new S;
return &s.a;
}
void main()
{
immutable int* p1 = f();
S* ps1 = cast(S*) p1;
ps1.b = 42;
immutable int* p2 = f();
S* ps2 = cast(S*) p2;
ps2.b = 43;
}
----
f is marked pure, has no parameters and no mutable indirections in the
return type. So f is strongly pure. That means, the compiler is free to
reuse p1 for p2. Or it may allocate two distinct structures, of course.
So, ps1 may or may not be the same as ps2, if those casts are allowed.
That can't be right.
Good example. I think the two pointers should be allowed to be equal. --
Andrei