On Tuesday, 15 October 2019 at 07:06:35 UTC, John Colvin wrote:
On Monday, 14 October 2019 at 19:45:11 UTC, Paul Backus wrote:
On Monday, 14 October 2019 at 17:00:56 UTC, John Colvin wrote:
Different ability to access a property depending if I'm inside something else when I look?

[snip]

You're attempting to call one of S's member functions without an instance of S to call it on.
[snip]
The real issue here is that the first `__traits(compiles)` check succeeds, even though the actual expression fails.

And all the other ones in my example that access members without an instance that also compile?

There's something pretty strange about the rules here.

Yeah, Paul's wrong here - the struct is what messes things up here, though I don't understand why. Just putting the first function inside a struct cause the exact same issue:

struct S {
    int a;
    int e() @property { return a; }
}

pragma(msg, __LINE__, " ", __traits(compiles,__traits(getMember, S, "e")));

void fun() {
pragma(msg, __LINE__, " ", __traits(compiles,__traits(getMember, S, "e")));
}

struct S2 {
    void fun() {
pragma(msg, __LINE__, " ", __traits(compiles,__traits(getMember, S, "e")));
    }
}

Interestingly, the code does of course actually compile:

struct S3 {
    void fun() {
        alias a = __traits(getMember, S, "e");
    }
}

Reply via email to