Striaght up... what is it with all these people just lately who seem obsessed with finding loopholes in their compilers?
When you do stuff like this you are playing with "undefined behavior" which can mean two things...
1) The result will be unpredictable ... Which function actually gets called???
2) It will probably only work on your compiler, others may do something different.
C does not support function or operator overloading (that's C++)... so don't bother wasting your time trying to fake it.
The fact that your compiler/linker doesn't return errors really just tells me that you need to turn up the warning level on your compiler and linker...