Collect template instantiations from clang AST


I am trying to collect all template instantiations via traversing AST with RecursiveASTVisitor. I thought I would be able to do it with VisitFunctionDecl from class RecursiveASTVisitor and getTemplateInstantiationPattern from class FunctionDecl. However, as mentioned in the comment to this method, it just returns the function declaration, from wich it could be instantiated. I discovered that this method returns the first acceptable pattern from the context of instantiation. Is there any way to get a real pattern out of a function template instantiation?


To visit all templates you could write a VisitTemplateDecl, the
instantiations are children of the template declaration.

If you only want function templates, then use VisitFunctionTemplateDecl.
Inside that method, use VisitFunctionTemplateDecl::specialisations() to
access all instantiantiations. I did not test it but it should be that
easy, provided that's what you meant


There's RecursiveASTVisitor::shouldVisitTemplateInstantiations() (defaulting to false) which you can "override" in your derivation.