On 2/14/2017 7:40 PM, Mike Parker wrote:
So, should extern(C) turn off mangling for types?

In C, it is common to have opaque types like `struct Foo;` all over the place, and maybe `struct Foo { ... };` appear in multiple times. This works in C.

It doesn't work in D, even if the name is set as `extern (C)`. That's because there is no C symbol table in the compiler, it's still a D symbol and follows D lookup rules. Thus, repeatedly declaring `struct Foo` will result in collisions.

The solution is to declare `struct Foo` in one file, and have the others import that file.

Reply via email to