This post is about D2 compiler/language.
Is the following code supposed to be wrong in D2? (and if so, then why?)
import std.c.stdio: printf;
struct S { int x, y; }
S produce() {
S s = S(10, 20);
return s;
}
void show(ref S s) {
printf("%d %d\n", s.x, s.y);
}
void main() {
show(produce());
}
That code works in D1.042, while DMD V.2.031 gives the errors:
test.d(10): Error: function temp.show (ref S s) does not match parameter types
(S)
test.d(10): Error: produce() is not an lvalue
After a gentle suggestion by Kirk McDonald I have also tried the following
signatures, with similar error messages:
void show(ref const(S) s) {
void show(const ref S s) {
passing locally-defined structs by ref is handy (the LDC compiler is currently
able to do it, as older D1 compilers too).
Bye,
bearophile