[cfe-dev] cursor equality with templates

Robert Anderson rwa at alumni.princeton.edu
Wed Jan 4 16:08:58 PST 2012

Say I have a class, with a member declaration:

class A { void foo() {} };

and I get a cursor to it.  I then find a reference to it, say:

int main() { A a; a.foo(); }

The return value of clang_getCursorReferenced() is then "equal" to the
declaration cursor.  By looking at source, it appears that "equal" here
means that they're of the same kind, and the fields data[3] are all equal.

Things change when A is a class template, however:

template <class T>
class A { void foo() {} };

Say I have a couple references to this method, now, say:

int main() { A<int> a; a.foo(); A<double> b; b.foo(); }

Now the return values of clang_getCursorReferenced() are no longer "equal"
to the declaration cursor.  They appears to be different via the value of
CXCursor::data[0], which seems to change for each instantiation of the

Is there a way to connect the reference cursors back to the member
declaration cursor?  Moreover, is there a way to do it through the python

My goal is to find all uses of A<T>::foo(), regardless of T.

Thanks for any help.

Bob Anderson
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20120104/37d2548a/attachment.html>

More information about the cfe-dev mailing list