Earlier quoted context omitted.
There was an argument that was not used by the function implementation. I removed it from the signature entirely - at the definition and the call sites. Boom. No longer compiles. Yes I understand the complex and surprising rules that cause this to happen. That doesn't make them any less complex and surprising.
"not used by the function implementation" doesn't mean "not passed in by callers". The callers won't find a matching signature once there is 1 less parameter. I don't see what is confusing about it. You probably misunderstood that warning as "No callers pass this parameter", which btw would only make sense for a parameter with a default value.
I went from
void foo(A a, B b) {
// Only use a
}
...
foo(x, y);
To this void foo(A a) {
// Only use a
}
...
foo(x);
And it stopped compiling. There were no other functions called `foo` so it is nothing to do with overloading.I'll give you the answer if you want or we can leave it a mystery so you can experience how confusing that behaviour is...