On Thursday, 4 February 2016 at 23:40:13 UTC, anonymous wrote:
You can do the same thing in D, using extern(C) to get no
mangling:
main.d:
----
alias float_t = double;
extern(C) float_t deref(float_t* a);
void main()
{
import std.stdio: writeln;
float_t d = 1.23;
writeln(deref(&d)); /* prints "1.01856e-314" */
}
----
deref.d:
----
alias float_t = float;
extern(C) float_t deref(float_t* a) {return *a;}
----
Command to build and run:
----
dmd main.d deref.d && ./main
----
You can do the same thing in D if you try, but it's not natural
at all to use `extern(C)` for *internal* linkage of an all-D
program like that.
Any competent reviewer would certainly question why you were
using `extern(C)`; this scores much lower in "underhanded-ness"
than the original C program.
Even so, I think that qualifies as a compiler bug or a hole in
the D spec.