They are distinguished by the parameters they accept and not on the values they return. Even though the return value has different types.
Distinction is made on the parameters being passed in.
No constructor or destructor. Although useless as such, we shall only worry about what code is implicitly generated for you. Make a copy of the passed parameter on the stack of the called function. This is leads to a memory fault. By declaring it as the friend of class Vector, we can make the private members of Vector also accessible to the above function.