I think he meant next: A.d: void foo(); A.cpp: namespace A { void foo(); } And now we has: exnern(C++, A) void foo(); import A; void main() { A.foo(); // which foo will be called ? how to call d version or c++ ? } There's no linker problem because D and C++ has different name mangling.