Почему вы ожидаете, что это пройдет?
first *= 3
изменяет first
, поэтому оно не сохраняет свое первоначальное значение.
Возможно, вы хотели написать
Vector2 result = first * 3;
Существует также проблема с Vector2 opBinary(string op)(const float rhs)
Эта функция используется в выражениях типа 10 * v
. Ваш код изменяет this
в выражении this *= rhs
. Эта функция должна быть реализована:
auto result = this;
result *= rhs;
return result;