www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - Re: DMD 1.035 and 2.019 releases

Walter Bright Wrote:

 Jarrett Billingsley wrote:
 Speaking of syntactical ambiguity, the expression
 
 S(1, 2, 3)
 
 can, right now, have one of three meanings:
 
 1. A struct literal for struct S
 2. A call to S's static opCall
 3. An instantiation of S and a call to its ctor
 
 Even if opCall goes away, we'll still be left with the ambiguity of 
 struct literal vs. ctor.  I'd really, really like to hear Walter's view 
 on this but he has responded neither to the thread I posted on 
 digitalmars.D nor the bugzilla ticket 
 (http://d.puremagic.com/issues/show_bug.cgi?id=2170).

If there's any constructor defined for S, then S(args) is a constructor call. If there's any opCall defined for S, then S(args) is an opCall call.

shouldn't this be so only for the static opCall's? shouldn't this be possible? /////////////////////////////////////////////////////// import std.stdio; struct Parabola { float a_; this(float a) { a_ = a; } float opCall(float x) { return a_ * x*x; } } void main() { Parabola f; float x, y; f = Parabola(1.0); x = 2.0; y = f(x); writefln("f(%1$s) = %2$%", x, y); } /////////////////////////////////////////////////////// Thanks!
 
 Otherwise, it's a struct literal.

Sep 03 2008