DIP23 draft: Fixing properties redux

deadalnix deadalnix at gmail.com
Mon Feb 4 07:02:23 PST 2013


On Monday, 4 February 2013 at 14:25:10 UTC, Timon Gehr wrote:
> On 02/04/2013 03:05 PM, 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.
>
> The obvious rule is not to give significance to redundant 
> parentheses.
>
>> 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.
>>
>
> No! &fun and &(fun) are the same thing. Functions that get 
> their address taken are not implicitly invoked. (Again, Scala 
> agrees.)
>

Scala don't really agree. fun is the function pointer. It is 
evaluated if the function pointer is a NOOP, but that's it. Here 
is scala semantic with D syntax :

void bar() {}
bar; // execute bar. Is an exception because taking the function 
pointer is a NOOP.

void foo(void function() bar) {}
foo(bar); // OK, bar is not evaluated.


More information about the Digitalmars-d mailing list