[cfe-dev] Confused by getPointOfInstantiation() of ClassTemplateSpecializationDecl

John McCall rjmccall at apple.com
Thu Jul 7 15:03:43 PDT 2011

On Jul 7, 2011, at 2:51 PM, Limin Fu wrote:

> 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<MyClass>". 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.

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.


More information about the cfe-dev mailing list