Introduces the definition of a union type.
// Example is from POSIX
union sigval {
int sival_int;
void *sival_ptr;
};
Introduces an elaborated type specifier, which specifies that the following name is the name of a union type. If the union name has been declared already, it can be found even if hidden by another name. If the union name has not been declared already, it is forward-declared.
union foo; // elaborated type specifier -> forward declaration
class bar {
public:
bar(foo& f);
};
void baz();
union baz; // another elaborated type specifer; another forward declaration
// note: the class has the same name as the function void baz()
union foo {
long l;
union baz* b; // elaborated type specifier refers to the class,
// not the function of the same name
};