    Syntax: bf(%union) tt(union-definition body)nl()
The tt(%union) directive specifies the entire collection of possible data
types for semantic values. The keyword tt(%union) is followed by a pair of
braces containing the same thing that goes inside a union in bf(C++).
For example:
        verb(
    %union {
      double u_val;
      symrec *u_tptr;
    };
        )
    This says that the two alternative types are tt(double) and tt(symrec
*). They are given names tt(u_val) and tt(u_tptr); these names are used in the
tt(%token) and tt(%type) directives to pick one of the types for a terminal or
nonterminal symbol (see section ref(TYPE)).

    Notes:
    itemization(
    it() The semicolon following the closing brace is em(optional).
    it() bf(C++-11) does allow class types to be used in tt(union)
        definitions, so they can also be used in tt(%union)
        directives. When a class type variant is required, all required
        constructors, the destructor and other members (like overloaded
        assignment operators) must be able to handle the actual class type
        data fields properly. A discussion of how to use unrestricted unions
        is beyon this manual's scope, but can be found, e.g., in the url(C++
        Annotations)(http://cppannotations.sf.net). See also section
        ref(MORETYPES). 
    )




