Is this a operator overloading bug?
Tim Fang
no at spam.com
Thu Jan 11 00:51:19 PST 2007
Thank you for you reply.
I have posted this to bugzilla, issue # 829.
static opCall() works well. I have downloaded helix lib, it looks pretty
good!
"Bill Baxter" <dnewsgroup at billbaxter.com>
wrote:eo4r0c$25tg$1 at digitaldaemon.com...
>I have confirmed that the code below works properly in DMD 0.177 but fails
>in DMD 0.178 (in the same way it does in 1.00), so it does look very much
>like the NRVO is indeed the culprit.
>
> Can you file a bug about it with bugzilla?
> http://d.puremagic.com/issues/
>
> You can get around it for now by making a constructor function (using
> static opCall is popular), and writing your opMul as
> return the_constructor_func(x*s, y*s, z*s);
>
> That seems to work, although I suspect that just means that it's disabling
> the NRVO, which I guess isn't smart enough to do the optimization when the
> return value is passed through several functions.
>
> --bb
>
> Tim Fang wrote:
>> I am very new to D and I am trying to implement a Vector3 struct,
>> please take a look at the code below, why the output is "nananan"? I use
>> dmd 1.00.
>>
>> --code---------------------
>> import std.stdio;
>>
>> void main()
>> {
>> Vector3 a;
>> a.set(1,1,1);
>> a = a*2;
>> writefln(a.x, a.y, a.z);
>> }
>>
>>
>> struct Vector3
>> {
>> float x,y,z;
>>
>> // constructor
>> void set(float _x, float _y, float _z)
>> {
>> x = _x;
>> y = _y;
>> z = _z;
>> }
>>
>> Vector3 opMul(float s)
>> {
>> Vector3 ret;
>> ret.x = x*s;
>> ret.y = y*s;
>> ret.z = z*s;
>> return ret;
>> }
>> }
>
More information about the Digitalmars-d
mailing list