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.


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

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

   double c = 3.3;
   char *e = "outside of union";

   d = 4.4;
   f = "inside of union";

   cout << c << ' ' << d << endl;
   cout << e << endl << f << endl;


3.3 4.4
outside of union
inside of union

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.
    Note   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.

See Also