On Apr 25, 2012, at 2:57 PM, Richard Smith wrote:
> Our current strategy is that RecursiveASTVisitor attempts to visit template
> specializations as part of visiting the template from which the
> specializations are instantiated. This goes wrong for a partial
> specialization of a member template of a class template:
>
> template<typename T> struct A {
> template<typename U> struct B;
> };
>
> template<typename T> template<typename U> struct A<T>::B<U*> {};
>
> Here, it's not trivial to find the specializations which are instantiated
> from the partial specialization, and the RecursiveASTVisitor fails to find
> them.
>
> A somewhat-related problem is that we do not visit template specializations
> where we have instantiated the declaration but not the definition. In such
> cases, we do not know (and, from the RecursiveASTVisitor, cannot reasonably
> compute) which primary template or partial specialization an instantiated
> declaration should be associated with, so the existing strategy cannot be
> applied there.
>
> I propose that we fix both of these issues by visiting all implicit
> instantiations of a template (including cases where we have not instantiated
> a definition) when we visit the primary template; a patch implementing this
> is attached.
>
> This conflicts with the chosen direction from when this functionality was
> added [1], so I'd like to hear any concerns with this direction.
I have no particular problem with this, but I have never written a
RecursiveASTVisitor that wanted to visit instantiations.
John.
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits