GCC (also Visual Studio) defines NULL like this: "#define NULL ((void *)0)" in stddef.h.
So:
c:\ test>type a.cpp
#define NULL ((void*)0)
void foo(int);
void foo(void*);
int main()
{
foo(NULL);
}
c:\ test>g++ a.cpp
C:\Users\XXX\AppData\Local\Temp\ccAUKoxR.o:a.cpp:(.text+0x16): undefined reference to `foo(void*)'
collect2.exe: error: ld returned 1 exit statusfoo(NULL) correctly calls foo(void*).