xnamath.h
You are missing some intrinsic "type punning" with those unions.
Obviously Line 1701
return reinterpret_cast<const __m128 *>(&vTemp)[0];
could compile in C?
Ah, my casting.
Cannot cast from __m128i to __m128 without first creating a union then type pun it.
The fundamental flaw is that __m128 (floats), __m128i (integers), and __m128d (doubles) are introduced at different times, so they are defined as separate unions. We need to combine them into a single universal union for easier type punning instead of reinterpret_cast from C++.