jcsxky wrote: @mizvekov After looking into the code, I think we should transform qualifier in TST. Consider the following code: ```cpp template <typename T> t1<T>::template t2<T> f1();
void f2() { f1<bool>(); } ``` `TemplateSpecializationType` of `t2` whose `Template` is a `QualifiedTemplateName`(`t1<T>::`) will be dependent if we didn't transform the qualifier since its qualifier and `DeclContext` are both dependent and it wouldn't be specialized in `Sema::CheckTemplateIdType` due to its name dependency. Transform the qualifier and rebuild the `TemplateName` as a `DependentTemplateName` is also consistent with what it is before cpp20(`t2` is a `DependentTemplateName`) which needs a `typename` keyword(`typename t1<T>::template t2<T>`). > The fact that this change somehow affects program semantics is still > unexpected and unexplained. The case in `clang/test/SemaCXX/many-template-parameter-lists.cpp` is affected is because the qualifier didn't be transformed and we can't find the instantiation of the declaration(`X`) which will not happen after this patch. This case is also accepted by gcc. The other cases are expected or explained in the comments. >If I had to take a guess, there is something wrong in the dependency >computation for the NNS. Have you checked that? I didn't find some problems in dependency computation for the NNS. https://github.com/llvm/llvm-project/pull/94725 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits