Operator precedence of "new"

Michel Fortin michel.fortin at michelf.com
Fri Oct 15 05:37:09 PDT 2010

On 2010-10-15 08:12:24 -0400, bearophile <bearophileHUGS at lycos.com> said:

> Currently to call a method to a newly build object/struct you need:
> (new Foo).bar();
> But isn't it better to change the D operator precedence rules a bit and 
> allow new to bind more closely than the method call, to allow a syntax 
> like:
> new Foo.bar();
> Do you see bad side effects in this D2 change?

But then, how does that work?

	new Foo.SubType.bar();

Could work like this:

	new (Foo.Subtype).bar();

which doesn't look too bad as long as .bar() is at the end. Remove it 
and you'll get this:

	new (Foo.Subtype);

Hardly interesting, and somewhat counter-intuitive. That's especially 
bad considering that all types are in reality enclosed module name 
which can be made explicit:

	new (std.stdio.File);

I much prefer that this works:

	new std.stdio.File;
	new Foo.Subtype;

Even if it means I have to do:

	(new Foo).bar();

Michel Fortin
michel.fortin at michelf.com

More information about the Digitalmars-d-learn mailing list