In the original you are casting an int to a pointer type, which is legitimate (although rarely a good idea). The other side of the matter is simply precedence.cast(T)a.b;Is really the same as: cast(T)(a.b);
Yes, you are right. Then it's cast back when assigning.