ilya-biryukov wrote:

> @ilya-biryukov When instantiating a template from a member template that was 
> explicitly specialized for a given implicitly instantiated specialization of 
> its enclosing class template, we need to keep track of which template was 
> actually used as the primary template (since we consider the specialization 
> to be a redeclaration of the (instantiated) member template). Since the 
> initial declaration & the specialized declaration have different template 
> depths, this (may) result in `getTemplateInstantiationArgs` returning an 
> incomplete set of template arguments for an entity.


so this is for cases like this, right?
```cpp
template <class T>
struct Foo {
    template <class>
    struct Bar {
        int foo = 10;
    };
};

template <>
template <class T>
struct Foo<int>::Bar {
    int foo = 10;
};
```

who do we strictly need to change what we pick in the simpler cases above? (my 
guess would be that we want simpler code, but I want to confirm it)


Do you have any ideas on how to revert back to the old behavior? In the code 
example above, I would've expected that using canonical declaration after 
getting template instantiation pattern would give us the same results as before.
Any idea why that isn't happening?

https://github.com/llvm/llvm-project/pull/111852
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to