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

Reply via email to