On Monday, 18 December 2017 at 23:44:46 UTC, Michael wrote:
Hello,
I have been looking at the following example found right at the
end of the section here:
https://dlang.org/spec/declaration.html#alias
struct S { static int i; }
S s;
alias a = s.i; // illegal, s.i is an expression
alias b = S.i; // ok
b = 4; // sets S.i to 4
and it runs fine to me, including if I add:
a = 3;
So, to me I don't see why either can't be valid, but either way
something needs to be fixed to reflect that this is no longer
illegal in DMD v2.077.1.
I think the reason that this works is because i is static,
meaning that you don't need the `this` reference of S to access
it and thus it can be aliased. Declaring a static class or struct
variable is pretty much the same as declaring a global variable,
just with a tighter scope. If you look at it that way, then this
makes a lot more sense. If you declare a global variable i at
module scope, of course you can create an alias for it.