An elaborated type specifier is a type name preceded by one of the keywords: enum, struct, union, and class. You can use an elaborated type specifier to instantiate an object of a previously declared type. For example:
enum Status {good, bad};union U { int n; float f}; //the following declarations use elaborated type specifiersstruct Date date; enum Status stat;union U u; //non elaborated formDate date2;Status stat2;U u2;
Additionally, you can use an elaborated type specifier to refer to a previously declared type that has been hidden by a non-type declaration.