My experience is somewhat different. In my test, case 2 and 3 do compile, and behave, as expected. In stepping through them with the debugger, they actually call setPosition. Test 1, however, results in some code that moves the three components of the Vector3D:
0x00005755 <+0441> mov -0x18(ëp),êx
0x00005758 <+0444> mov êx,-0x24(ëp)
0x0000575b <+0447> mov -0x14(ëp),êx
0x0000575e <+0450> mov êx,-0x20(ëp)
0x00005761 <+0453> mov -0x10(ëp),êx
0x00005764 <+0456> mov êx,-0x1c(ëp)
But there's no call to obj_msgSend and a breakpoint in setPosition is never called. :-(
Thank you for checking that on your own system. I will take your example and my own ode and use it to generate a bug report.
If you'll excuse some Danish (I'm not sure what the Swedish equivalent might be)
Mange Hilsner,
Scott