Different ability to access a property depending if I'm inside something else when I look?

struct S
{
    int a;
    static int b;
    int c() { return a; }
    static int d() { return 3; }
    int e() @property { return a; }
    static int f() @property { return 3; }
}

void foo(S s)
{
pragma(msg, __LINE__, " ", __traits(compiles, __traits(getMember, s, "a"))); pragma(msg, __LINE__, " ", __traits(compiles, __traits(getMember, S, "a")));

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

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

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

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

pragma(msg, __LINE__, " ", __traits(compiles, __traits(getMember, s, "f"))); pragma(msg, __LINE__, " ", __traits(compiles, __traits(getMember, S, "f")));
}

struct C(S)
{
    void foo(S s)
    {
pragma(msg, __LINE__, " ", __traits(compiles, __traits(getMember, s, "a"))); pragma(msg, __LINE__, " ", __traits(compiles, __traits(getMember, S, "a")));

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

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

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

pragma(msg, __LINE__, " ", __traits(compiles, __traits(getMember, s, "e")));
        // ALL True except for this one:
pragma(msg, __LINE__, " ", __traits(compiles, __traits(getMember, S, "e")));

pragma(msg, __LINE__, " ", __traits(compiles, __traits(getMember, s, "f"))); pragma(msg, __LINE__, " ", __traits(compiles, __traits(getMember, S, "f")));
    }
}

alias C0 = C!S;

Reply via email to