A proper WAT moment

Paul Backus snarwin at gmail.com
Mon Oct 14 19:45:11 UTC 2019


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. Reduced version:

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

void foo(S s)
{
     pragma(msg, __LINE__, " ", __traits(compiles, S.e)); // true 
(???)
     S.e; // Error: need `this` for `e` of type `@property int()`
}

struct C
{
     void foo(S s)
     {
         pragma(msg, __LINE__, " ", __traits(compiles, S.e)); // 
false
         S.e; // Error: `this` for `e` needs to be type `S` not 
type `C`
     }
}

The real issue here is that the first `__traits(compiles)` check 
succeeds, even though the actual expression fails.


More information about the Digitalmars-d-learn mailing list