On Sunday, 1 June 2014 at 09:18:50 UTC, bearophile wrote:
Atila Neves:
D:
struct Foo { int i; int j; }
extern(C++) void useFoo(ref const(Foo) foo);
C++:
struct Foo { int i; int j; };
void useFoo(const Foo& foo) { ... }
This doesn't look very safe because D const is transitive,
unlike the C++ const. So in the C++ code you can mutate inner
data inside foo and the D code will assume such data is not
changed.
Bye,
bearophile
Oh, it's not even remotely safe and I know that. But it's "kinda"
safe and it "works" for structs, so why not classes?
The worse thing about this is that I can happily slap a "const"
in the D declaration and it'll link to non-const C++ code. That's
a lot less safe than treating C++ const as if it were D const.
Atila