Hi,
Is anyone able to help me figure out how to ensure ClassTemplateSpecializationDecls always have definitions so that I can properly inspect there members with the appropriate type substitutions? I am visiting template instantiations via shouldVisitTemplateInstantiations() { return true; }
, but I’m finding that they do not always have a definition attached to them.
I’m porting a code generation tool from the python clang bindings to C++ using ClangTool and RecursiveASTVisitor. My tool generates lua bindings from C++ source code. It needs to generate bindings for template instantiations, and requires knowledge of the template arguments in order to do so.
This code will result in a ClassTemplateSpecializationDecl that is missing its definition (hasDefinition() == false):
template<typename T>
class Bar {
public:
T m_t;
};
using BarInt = Bar<int>;
Whereas this code will result in hasDefinition() == true as I want:
class Foo : public Bar<int> {};
Thanks for any help you can provide! I’ve searched the net for answers, and also browsed the clang source code, but I’ll admit that I haven’t dug deeply enough yet to figure out exactly which code path is triggering the instantiations that are missing definitions yet.
Thanks,
Kris