For each identifier in the disambiguation table,
we track whether the identifier
(i) a typedef name, or
(ii) an object or function, or
(iii) an enumeration constant.
Not all identifiers fit these categories;
for instance, structure and union tags correspond to none of the above.
However, for disambiguation purposes,
we do not need to track all identifiers,
but just the kinds just listed.
Note also that we do not need to distinguish between objects and functions,
as they are treated the same for disambiguation purposes.