On 3 October 2016 at 23:50, John Colvin via Digitalmars-d <digitalmars-d@puremagic.com> wrote: > On Monday, 3 October 2016 at 13:41:13 UTC, Manu wrote: >> >> I'm finding this rather annoying: >> >> struct S >> { >> static @property int p() { return 10; } >> } >> >> pragma(msg, typeof(&S.p)); // prints: int function() @property >> pragma(msg, is(typeof(&S.p) == function)); // prints: false >> >> It looks like a function... but I can't identify it as a function! > > > The problem is that function pointers in "is" expressions don't match > "function" or "delegate". > > static assert (is(void delegate() == delegate)); //passes > static assert (is(void function() == function)); //fails > static assert (is(void function() == delegate)); //fails > > Bug report?
Nar, I just forgot about this well-known edge. 'function' means something different in is(); it means a proper-function, *not* a function pointer. if(X == R function(A), R, A...) will test for function pointers. It's still hard though, @property's are hard to detect, and I am really struggling to distinguish between static and non-static properties without testing for assignments, which is terrible.