When do I use a union in C or C++, instead of a struct?