Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here.

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;


inside of union

Community Additions

© 2015 Microsoft