emilio added a comment.

In https://reviews.llvm.org/D32348#738704, @rsmith wrote:

> This change looks like it introduces a regression itself: given
>
>   template<typename T> struct A {};
>   template<typename T> using B = A<T*>;
>   B<int> bi;
>
>
> ... requesting the template arguments for the type `B<int>` changes from 
> producing  `int` to producing `int*` with this patch, which seems to directly 
> oppose the intentions of https://reviews.llvm.org/D26663.


FWIW when I wrote https://reviews.llvm.org/D26663, I did it because arguments 
weren't inspectionable at all for `using` declarations. Actually both of them 
would've worked for me.

>   template<typename T> using C = T;
> 
> 
> With this patch, requesting the template arguments for `C<int>` gives `int` 
> but requesting the template arguments of `C<A<void>>` gives `void` rather 
> than `A<void>`.

That being said, that is _specially_ annoying (good catch btw). Annoying enough 
to justify reverting this change I'd say...

I'll submit something with the test-cases. I guess people that depended on the 
old translation will just need to live with it... shrug.

I guess I could do something clever like: If it's both a 
`ClassTemplateSpecializationDecl`, and a `TemplateSpecializationType`, and the 
template arguments of the second happen to not be a template specialization, 
then use the `ClassTemplateSpecializationDecl`, otherwise the other, but that 
seems fairly tricky to maintain, so I'd rather just do the former.

Thanks for looking through it, btw.


Repository:
  rL LLVM

https://reviews.llvm.org/D32348



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to