TVector3 object, += operator plus several terms

I believe I may have found a bug in root.

If I try the following:

root [0] TVector3 r(-0.0078729 , -0.00744445 , -0.0171826);
root [1] TVector3 v(8.29964 , 8.27998 , 8.23266 );
root [2] TVector3 g( 0 , 0 , -9.8 );
root [3] Double_t dt = 0.023;
root [4] v += g * dt
(class TVector3)39947536
root [5] r += v * dt + g * pow( dt , 2 ) / 2;
Error: operator+= not defined for TVector3 (tmpfile):1:
*** Interpreter error recovered ***
root [6] r = r +  v * dt + g * pow( dt , 2 ) / 2;
root [7] r.X()
(const Double_t)(-7.87290000000000038e-03)
root [8] r.Y()
(const Double_t)(-7.44445000000000003e-03)
root [9] r.Z()
(const Double_t)(-1.71825999999999993e-02)
root [10] r = r +  v * dt + g * pow( dt , 2 ) / 2;
root [11] r.X()
(const Double_t)(-7.87290000000000038e-03)
root [12] 

Basically I can’t seem to be able to use the += operator adding several terms at the same time. Furthermore when I try it “manually”, the vector r does not get overwritten by the new value as can be seen in the last part.

Perhaps I’m mistaken, but shouldn’t all my attempts behave perfectly well?

The thing that finally worked was to break it down:

root [19] r += v * dt;
root [20] r += g * dt2;
root [21] r.X()
(const Double_t)1.83018819999999999e-01
root [22] r.Y()
(const Double_t)1.82995089999999999e-01
root [23] r.Z()
(const Double_t)1.61800179999999988e-01

Andres

Hi Andres,

This is a limitation of CINT which does not parse well all use cases of operator (composition). The same code ought to work properly when compiled.

Cheers,
Philippe.