This documentation is archived and is not being maintained.

Anonymous Unions

Anonymous unions are unions that are declared without a class-name or declarator-list.

union   {   member-list   }  

Such union declarations do not declare types — they declare objects. The names declared in an anonymous union cannot conflict with other names declared in the same scope.

In C, an anonymous union can have a tag; it cannot have declarators.

Names declared in an anonymous union are used directly, like nonmember variables.

In addition to the restrictions listed in Union Member Data, anonymous unions are subject to additional restrictions:

  • They must also be declared as static if declared in file scope. If declared in local scope, they must be static or automatic.

  • They can have only public members; private and protected members in anonymous unions generate errors.

  • They cannot have function members.


    Simply omitting the class-name portion of the syntax does not make a union an anonymous union. For a union to qualify as an anonymous union, the declaration must not declare an object.

// anonymous_unions.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
int main() {
   union {
      int d;
      char *f;

   d = 4;
   cout << d << endl;

   f = "inside of union";
   cout << f << endl;
4 inside of union