I think you are right, at least if normalize creates a new vector. But when I really want to normalize the instance normalize is invoked on, it needs access to the state. But maybe that is not the problem as the state is public...
Same reasoning (IMO). One input, one output, no dependency on the private state.
"Good practice" is enough of a reason for me to not use unions for this
I don't think you want to be using a union here, it might work one way or another, but I can't see this as being considered good practice
So decision has to be made between "inheritance" and "typedef + free functions"