Confused by getPointOfInstantiation() of ClassTemplateSpecializationDecl

Hello,

I am trying to handle C++ templates in my automatic binding tool based on Clang. I run into a problem that requires to determine the location of the first instantiation of a template class.

Basically, I have a file that declares a function with parameter of type “std::vector”. From the FunctionDecl of that function, I get a TemplateSpecializationType object and then a ClassTemplateSpecializationDecl object for the parameter type. I thought method getPointOfInstantiation() of ClassTemplateSpecializationDecl will give a location in my file, but instead, it gives a location from stl_vector.h.

Isn’t the instantiation point supposed to be located in my file? Or am I understanding something wrong here? Thanks a lot.

Limin

The point of instantiation is the location that actually first forced your template to be instantiated. Just writing the template specialization type won't do that — it can stay an incomplete type up until something actually tries to look at its members or bases.

John.

Hi John,
Thank you for the explanation. It’s clear now. I will use the ParmVarDecl::getLocation() for the parameter instead.

Limin