DIP23 draft: Fixing properties redux

Timon Gehr timon.gehr at gmx.ch
Mon Feb 4 06:05:28 PST 2013


On 02/04/2013 06:36 AM, Andrei Alexandrescu wrote:
> On 2/3/13 11:31 PM, Jonathan M Davis wrote:
>> I tend to agree that making the parens change the nature of the
>> expression is a bad idea.
>
> I think there's some misunderstanding here.

Agreed.

> Parens change the nature of expressions ALL the time.
>

In D? No way.

Precedence rules are introduced in order to make parens _implicit_.

In a language with unary & and binary ., There are two possible 
interpretations for &a.b:

(&a).b
&(a.b)

In the case of D, &a.b is just a shortcut for &(a.b). How can they 
denote different things?

> There is a weird rule in C++11 that makes sometimes typeof(expr) and
> typeof((expr)) mean different things.

There is also the argument-dependent name lookup thing

namespace bar{
     struct S{} baz;
     S foo(S x){ return x; }
}

int main(){
     foo(bar::baz); // Koenig lookup finds bar::foo
     (foo)(bar::baz); // no Koenig lookup, foo undefined
}

Not examples to follow.

> That is arguably an example to
> avoid. But introducing parens among parts of an expression is expected
> to affect meaning.
>

Sure, but that is not what happens here at all. The parens are 
introduced around ONE part of the expression.


More information about the Digitalmars-d mailing list