@property Incorrectly Implemented?
Ethan Watson via Digitalmars-d
digitalmars-d at puremagic.com
Mon Sep 12 00:38:37 PDT 2016
On Sunday, 11 September 2016 at 23:31:54 UTC, Timon Gehr wrote:
> His property returns by ref.
Irrelevant for the implementation details of properties. Ref in
that context specifies a function property that makes the
property function return by ref (wrap your head around that one).
That entire post went in to detail about why treating properties
as the functions they are is correct.
> You do realize that typeof(property) is the type of the return
> value, right? Also, it's easy. Add __traits(isVariable,...) or
> __traits(isProperty,...), or just use .tupleof. Furthermore you
> can even get the property accessor function overload set using
> (a hypothetical) __traits(getPropertyAccessors,...).
You are correct. typeof( __traits( getMember, Type, PropertyName
) ) is the type of the return type of the function, since
getMember forms a complete expression which evaluates down to the
return type.
Note that all of the __traits( is<X>Function ) return true
correctly on these things though. This is one of the checks I
have to make when parsing over a class to correctly determine
what is and isn't actually a variable. I've even wrapped it all
up in a trait called IsVariable. The std library has traits for
checking types but nothing that straight up tells you if
something is a variable or not.
As such, who needs __traits( getPropertyAccessors ) when
__traits( getOverloads ) already works?
> [Commentary on example]
Actually, I take back what I said. Mostly because of typeof( t.x
). The thing that needs fixing is the property evaluation order
so that ambiguities like all of this don't exist.
More information about the Digitalmars-d
mailing list