Yes it is the more difficult thing to support. Stop for a minute and think about it. Take this simple piece of code for example:
typedef std::list<std::string> StringList;
StringList myList;
First of all, let's pretend we support typedefs (which we don't - think about member function pointers for a reason why we don't). This is the easy example. The parser could ignore the "<std::string>" part (in the typedef) so it would work pretty much as it is.
Now take this example:
class SomeRefCountedClass {...}
template <class T> class SmartPtr {
...
void AddRef();
void DelRef();
T* operator()();
...
}
typedef SmartPtr<SomeRefCountedClass> SmartClass;
SmartClass myList;
Here, if you ignore the "<SomeRefCountedClass>" part in the typedef, let's suppose it would work with AddRef(), DelRef() ,etc.
But we want SmartPtr to be, like, transparent. Like it doesn't exist. Most call tips for it should actually be call-tips of SomeRefCountedClass. To do this, the plugin should recognize
and take into account the T* operator()() template member function.
I don't know if the message is getting accross. I hope the above are clear enough, relative to the subject.
Anyway, these are some random thoughts (which always occur to me when thinking about templates and call-tips). I may be completely wrong or there may be an easier way to accomplish this. I don't know. I 'm always open to suggestions and contributions
Yiannis.