================ @@ -78,6 +78,22 @@ class UnresolvedSetImpl; class VarTemplateDecl; enum class ImplicitParamKind; +// Holds a constraint expression along with a pack expansion index, if +// expanded. +struct AssociatedConstraint { + const Expr *ConstraintExpr = nullptr; + int ArgumentPackSubstitutionIndex = -1; ---------------- erichkeane wrote:
Honestly, this is something that I find myself re-learning EVERY SINGLE time. It is unbelievably confusing and error-prone to figure out what the 'non-value' is here. In reality it would be great if we had a std::optional for all of these (or, at least, a type to wrap the idea of 2^N-2 values and a sentinel). While I understand the consistency argument, I'd say we should 'do it right' this time (or at least more so), and clean up over time. THAT SAID, if the -1 doesn't get 'outside' of this class (that is, the constructor ensure it doesn't take a -1, and that just be the 'has no pack' version-by-construction via an alternate constructor) other than for the purposes of serialization (perhaps via a ::CreateFromDeserialization esque method), than I think that at least limits the fallout of hte magic-number to only the internals of this, which is more acceptable. https://github.com/llvm/llvm-project/pull/133190 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits