I am recieving the following compile warning/error message from g++:

main.cpp:8: warning: cannot pass objects of non-POD type `class Vector4d'
through `...'; call will abort at runtime
this is the code that is giving it:

Code:
#include "3DMath.h"
                                                                               
                                                                               
int main(int argc, char **argv)
{
  Vector4d x= Vector4d(2,4,5,1);
  float mag = Magnitude(x);
  printf("%f\n",x); // dont worry, 3DNath.h links the stdio.h header
return -1;
};
now, here is the definition of Magnitude:
Code:
  template <class Vector>float Magnitude(Vector vVector)
{
                                                                               
 return float(sqrt( (vVector.x * vVector.x) + (vVector.y * vVector.y) + (vVector.z * vVector.z)));
                                                                               
};
what exactly am I doing wrong in the use of the templated function as I am just learning templates(decided that after a year, I really did need to use them).