https://issues.dlang.org/show_bug.cgi?id=20025
--- Comment #4 from Simen Kjaeraas <[email protected]> --- There seems to be a lot inconsistencies here. This code: struct S(bool _static, bool _field) { static if (_static) static int value = 77; else int value = 77; static if (_field) int field = 13; alias value this; this(ref S rhs) { } string toString() { return (_static ? "static, " : "non-static, ") ~ (_field ? "field" : "empty"); } } void test(T)(int i, ref int j, T t) { import std.stdio; writeln(t, ":"); writeln(" by val: ", i); writeln(" by ref: ", j); } void test(T)(T t) { test(t, t, t); } unittest { test(S!(true, true)()); test(S!(true, false)()); test(S!(false, true)()); test(S!(false, false)()); } Prints this on my machine (2.087.0): static, field: by val: 77 by ref: 13 static, empty: by val: 7771469 by ref: 0 non-static, field: by val: 77 by ref: 77 non-static, empty: by val: 77 by ref: 77 And this on run.dlang.io (also 2.087.0): static, field: by val: 2007830860 by ref: 13 static, empty: by val: 2007830868 by ref: 0 non-static, field: by val: 2007830848 by ref: 77 non-static, empty: by val: 2007830860 by ref: 77 The correct behavior, of course, is what's seen on my machine for both the non-static cases. --
