DIP23 draft: Fixing properties redux

Walter Bright newshound2 at digitalmars.com
Mon Feb 4 15:18:16 PST 2013


On 2/4/2013 6:05 AM, Andrei Alexandrescu wrote:
> Couldn't AddressOf use "&(" + exp + ")"?
>
> I thought more about this. The problem remains even without @property, due to
> optional parens in function invocation. Consider:
>
> ref int fun() { ... }
> auto p1 = &fun;
> auto p2 = &(fun);
> auto p3 = &(fun());
>
> What are the types of the three? The optional parens in invocation require some
> disambiguation. I think the sensible disambiguation is to have &fun take the
> address of fun and the other two take the address of fun's result.

The only time it is valid to take the address of a function's return value is if 
the function returns a ref.

But I also would think that it's a suspicious practice to take the address of a 
ref. We've disallowed it in other circumstances, why allow it here? If a 
function intends for someone to take the address of the return ref, shouldn't 
the function return a pointer instead?

If taking the address of a ref is disallowed, then the above problem goes away. 
&fun, in all its variants, takes the address of the function.



More information about the Digitalmars-d mailing list