sure it can, really just like a struct :
union toto { union toto* a; unsigned b; };
once the toto tag identifier is known as the union union toto* type, union toto* is a pointer to an incomplete type.
It is hard to understand that this knowledge will serve you for anything other than an interview.
source share