Vector3 doesn't have a copy constructor.
The problem is:
On Linux/amd64 with GNUC a class is treated very differently if the copy constructor is declared or not. A class with a copy constructor is always passed through a reference even when the function is declared to pass the type by value. When the copy constructor is not declared, the compiler will pass the type in the CPU registers instead, if the class is small enough. The real complicated part is that when the type is passed in the CPU registers, it is split up by the type of each member, so integer members are passed in the general purpose registers, and float members are passed in the floating point registers. This is why AngelScript doesn't allow these types to be passed by value, the implementation to support that in the native calling convention is just too difficult.
You're not seeing this problem on Windows or Linux 32bit because the existence of the copy constructor or not doesn't make a difference on these platforms.
Quote is from Andreas Jönsson, the Angelscript developer.
I wonder if this could be added?
I am not a C++ guru, and I have no idea if it will be affecting performance, but I nearly gave up on binding Ogre to Angelscript due to this issue. Works a treat on 32bit *nix and all-bit Windows.
I am certain that it has some consequence in other situations as well when on 64bit *nix.