Pointers present some special problems for overload resolution.
Say for example,
void f(int* x) { ... }
void f(char* x) { ...}
int main()
{
f(0);
}
What is wrong with calling f(0)? How can I fix the function call for f(0)?
f((int*) 0) or f((char *) 0)
But if you find yourself doing this I would take another look at your design.