A proper WAT moment
John Colvin
john.loughran.colvin at gmail.com
Mon Oct 14 17:00:56 UTC 2019
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;
More information about the Digitalmars-d-learn
mailing list