There is in fact, no difference between: int *p; shared int *p2 = p; int *p3 = cast(int*)p2;and this: int *p; shared int *p2 = p; int *p3 = p;
If I understand Manu correctly the first should compile, and the second should error, just like if you replaces shared with const in the above.