The ForwardingCallVisitor previously picked up on (constructor or function) calls inside a single argument of a variadic function, where the corresponding pack expression is (partially) expanded, but only consists of a single entry. This mismatch between expecting the full pack and finding only a single entry caused a crash, which the first half of this diff fixes.
The second half deals with the failure of resolveForwardingParameters to detect forwarded parameters when implicit conversions happen via constructor calls, not normal ImplicitCastExpr.
so in theory this is still a heuristic, and somewhat complicated. what about just checking if we have "enough parameters" to satisfy the pack expansion (as i did in D130260)