Why in the next program the member function foo has priority over the global foo although the global one match the type?
#include <iostream>
using namespace std;
void foo(double val) { cout << "double\n";}
class obj {
public:
void callFoo() { foo(6.4); }
private:
void foo(int val) {cout << "class member foo\n"; }
};
int main() {
obj o;
o.callFoo();
}
Because the member function named foo
could be found at the class scope, and then name lookup will stop, so the global version foo
won't be considered for overload resolution, even if the global version is more appropriate here. It is a kind of name hiding.
If you want to call the global version, you could explicitly call it by ::foo(6.4);
.
And here is a workaround to bring the global function into overload resolution.
Reference for Unqualified name lookup
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With