erichkeane added inline comments.
================ Comment at: clang/lib/Sema/SemaTemplateInstantiate.cpp:322 + // they mean. + R = Response::UseNextDecl(PartialClassTemplSpec); } else if (const auto *ClassTemplSpec = ---------------- erichkeane wrote: > rsmith wrote: > > Can we produce a "done" response instead here? It doesn't seem right to > > carry on to the next level here without adding a level of template > > arguments -- if any further arguments were somehow collected, they would be > > collected at the wrong template depth. But, as far as I can determine, we > > should never encounter a partial specialization declaration except in cases > > where there is nothing remaining to be substituted (all outer substitutions > > would be identity substitutions). I think the same thing applies when we > > reach a class template declaration (the first branch in `HandleRecordDecl`) > > -- we should just be able to stop in that case too, rather than collecting > > some identity template arguments and carrying on to an outer level. > > > > If we can't produce a "done" response here for some reason, then we should > > collect a level of identity template arguments instead. > For constraints, the arguments are relative to namespace scope as far as I > can tell. If we ended up 'stopping' we would miss references to the outer > template, so something like: > > ``` > template<typename T> > struct Outer { > > template<typename U> > struct Inner { > void foo() requires (is_same<T, U>){} > }; > > }; > > ``` > > Right? The substitution fo 'T' would be invalid at that point? > > Also, what do you mean by 'identity' template arguments? I'm not sure I > follow. Er, I meant something like (since it needs to be a partial spec): ``` 1 template<typename T> 2 concept C = true; 3 4 template<typename T> 5 struct Outer { 6 template<typename U, typename V> 7 struct Inner {}; 8 template<typename U> 9 struct Inner<U, U> { 10 void foo() requires C<U> && C<T>{} 11 void foo() requires true{} 12 }; 13 }; ``` CHANGES SINCE LAST ACTION https://reviews.llvm.org/D147722/new/ https://reviews.llvm.org/D147722 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits