I'd like some help in understanding the motivation for this change. The bug report says But the intention behind this is clearly that there is a member function A::foo which derived classes overwrite. and I'm not certain that's so clear. It's been my experience that hidden member function names are unusual and it's hard to ascribe intent to them.
FWIW, I would find this new behavior to be confusing. My mental model for this check is "if it doesn't need to be a member function, make it a static function instead", and this behavior doesn't fit that model.
I struggle myself to fully understand the motivation behind the bug report. This is certainly not code that I would write.
So I don't really care about that kind of code and I didn't want to be in the way of other people's way of writing C++.
Alternatively, we could ask the bug reporter to use // NOLINT to support his specific case. I will try to get some clarification
from the reporter.