On Friday, 5 February 2016 at 01:14:05 UTC, Adam D. Ruppe wrote:
D allows that. This is why I recommend putting `static
assert(foo.sizeof == expectation);` in code that interfaces
with external things, like C code, or D .di stuff.
#include <math.h> /* sqrt */
D *doesn't* allow that though - at least, not in a monolithic,
idiomatic D program: there wouldn't be any duplicate declaration
of `spectral_contrast()` to mess up.
Yes, you can force the matter using `extern(C)` like anonymous
demonstrated earlier - but using `extern(C)` for internal linkage
in an all-D program would certainly attract scrutiny from
reviewers; it would score poorly on the "underhanded-ness" test.
As to the ".di" stuff - I've not used them. Care to educate me?
How can they cause similar problems?
that line is an interesting one too: the trick is depending on
namespace pollution by the include. In D, you might write
`import core.stdc.math : sqrt;` and make that misleading
comment part of the code.... though then you could perhaps
exploit that module bug (314?).
314 definitely has potential. Should we start an "Underhanded D"
contest? Sounds like bad marketing, but a lot of fun :-P