So UE defines transform composure:
// Order matters when composing transforms: C = A * B will yield a transform C that logically first applies A then B to any subsequent transformation. Note that this is the opposite order of quaternion (TQuat<T>) multiplication.
However, in the Multiplication function:
// ScaleResult = Scale.B * Scale.A
OutTransform->Scale3D = VectorMultiply(ScaleA, ScaleB);
`
Component-wise scale multiplication does not take into account the rotation of the incoming (local) transform A.
The result means that scaling an object on the z-axis will scale a rotated child object along its local z-axis, not the parent z-axis, which is definitely not intended because this is not how location or rotation behave.
Is this a bug?
EDIT: Converting the two transforms to Matrices and then performing the multiplication is a work-around to get the correct result:
FTransform(A.ToMatrixWithScale() * B.ToMatrixWithScale());