On 9/6/16 3:18 PM, John wrote:
Currently it seems that @property isn't implemented correctly. For some
reason when you try to get the pointer of a property it returns a
delegate for some reason. This just seems plain wrong, the whole purpose
of a property is for a function to behave as if it weren't a function.
There's also some inconsistencies in the behavior, "get" is implemented
one way and then "set" is implemented another.
http://ideone.com/ZgGT2G
&t.x // returns "ref int delegate()"
&t.x() // ok returns "int*", but defeats purpose of @property
&(t.j = 10) // shouldn't this return "ref int delegate(int)" ?
It would be nice to get this behavior fixed, so that it doesn't become
set in stone. I think returning a delegate pointer is not what people
would except nor is there really any use case for it.
Just FYI, at the moment I believe the only difference (aside from the
defunct -property switch) between a @property function and a
non-@property function is:
int foo1() { return 1; }
@property int foo2() { return 1; }
pragma(msg, typeof(foo1)); // int function()
pragma(msg, typeof(foo2)); // int
That's it. typeof returns a different thing. All @property functions act
just like normal functions when used in all other cases, and property
syntax (assignment and getting) work on non-@property functions.
This situation is less than ideal. But it's been battled about dozens of
times on the forums (including the very reasonable points you are
making). It hasn't been solved, and the cynic in me says it won't ever be.
-Steve