On Sunday, 30 April 2017 at 00:17:37 UTC, Carl Sturtivant wrote:
Consider the following.

struct member
{
    int n;
}

struct outer
{
    member x;
    alias x this;
    alias n2 = n;
}

This does not compile: alias n2 = n;
Error: undefined identifier 'n'

On the other hand if change that into
    alias n2 = x.n;
then it does compile.

void main()
{
    outer o;
    o.n2 = 5;
}

Now this code doesn't compile: o.n2 = 5;
Error: need 'this' for 'n' of type 'int'

Given that one struct inside another is a static situation, this seems unnecessarily strict. It's getting in the way of some name management with `alias this`. What's the rationale here?

What exactly did you expect here?

'n' is not in the scope of 'outer'.

'n' is in the scope of 'member'.

Of course it works with 'x.n' since 'x' points to the 'member' declared inside 'outer'.

I mean it would have worked with classes, but structs are different does not have any type of actual inheritance, which is what you're trying to achieve.

```
class member {
    int n;
}

class outer : member {
    alias n2 = n; // Ok ...
}
```

Reply via email to