I just realized I wasn't clear -- it calls the (wrong) overloaded function: extern(C) void foo(int); extern(C) void foo() { writeln("yes, this is called"); } void main() { foo(42); } outputs: yes, this is called