[Issue 16650] Wrong mangling for extern(C++) with posix stat_t
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Fri Jul 7 18:32:37 PDT 2017
https://issues.dlang.org/show_bug.cgi?id=16650
Vladimir Panteleev <dlang-bugzilla at thecybershadow.net> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution|--- |INVALID
--- Comment #2 from Vladimir Panteleev <dlang-bugzilla at thecybershadow.net> ---
(In reply to Jacob Carlborg from comment #1)
> Not sure why it's called "stat_t" in the D version when it's
> called "stat" in the C headers.
It's because in C, "stat" is both the name of a struct and a function. This is
not a problem for C because structs in C have their own namespace (unless you
typedef them), but there is no equivalent in D.
There are some workarounds available:
- You can use extern(C) to link the D declaration with the C definition. As
argument types are not mangled with C linkage, type name mismatches will not
result in a link error.
- You can use pragma(mangle) on the D side to directly override a function's
mangled name;
- Finally, on the D side you could declare the function as:
struct stat;
void myFunc(stat*){}
then cast the stat_t* to stat* when invoking the function.
As this is not a bug in D and simple workarounds exist, I'll close this, but
feel free to reopen if you can present actionable ideas for improving the
situation.
--
More information about the Digitalmars-d-bugs
mailing list