Type of enum constants

If I have:

typedef enum { E } e_t;

and then an expression:

a = E;

is it possible to get back to the typedef name from the DeclRefExpr node for 'E' ?

EnumConstantDecl * EC = dyn_cast< EnumConstantDecl >( DeclRefExpr->getDecl() );

QualType = AC->getASTContext().getEnumType( dyn_cast< EnumDecl >( EC->getDeclContext() ) );

gets me to enum { E } e_t, but not the typedef itself.


Try TagDecl::getTypedefNameForAnonDecl .


That does the job. Thanks.

How do I do the same if there is a tag name?


Are you talking about "typedef enum A { B } A;"? If you really need
to find the typedef in that case, I think you're stuck with traversing
the AST to try and find it.


Yes, that's what I was after. However, for this case I can get away with knowing if I'm in a declarator, so isEmbeddedInDeclarator() will do.