I'm not sure if this is a bug or not: struct Foo { } void test(void* test) { assert(0); } void test(Foo* test) { } void main() { test(null); } The call matches the second overload: "void test(Foo* test)". But shouldn't this be an ambiguous call?