[PATCH] D147722: [Concepts] Fix Function Template Concepts comparisons

Richard Smith - zygoloid via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 6 13:03:31 PDT 2023


rsmith added a comment.

In D147722#4249612 <https://reviews.llvm.org/D147722#4249612>, @erichkeane wrote:

> Hmmm... the examples I thought would cause a problem don't seem to when switching that to Done.  So I'm going to run regression tests and give that a shot.
>
> I think I now get what you mean about 'Identity' arguments, we basically need to have arguments to keep something like the above example (where 'foo' is a template, and the partial specialization is done correctly), and when trying to substitute into it, we would end up having the arguments to `Outer` and `Foo`, but substitution would think of the `Foo` args as the `Inner` args for depth.  I'm giving the testing a shot, and will see if that fixes the problem without causing a regression in any of the concerns I have.  I suspect I don't have a problem with the 'identity' for the same reason 'Done' works: we never hit that situation.

If we know that all further levels will be "identity" levels (mapping template-param-i-j to template-param-i-j), then we can use `MultiLevelTemplateArgumentList::addOuterRetainedLevels` to represent that and leave those levels alone. That will mean the `getNumSubstitutedLevels() == 0` check in `SubstituteConstraintExpression` will fire a lot more often, which seems like a nice benefit.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D147722/new/

https://reviews.llvm.org/D147722



More information about the cfe-commits mailing list