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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…