# V790. It is suspicious that the assignment operator takes an object by a non-constant reference and returns this object.

The analyzer has detected an assignment operator that receives an object by a non-constant reference and returns that same object.

Consider the following example:

    class C {
      C& operator = (C& other) {
        ....
        return other;
      }
    };

Implementing an assignment operator in a way like that could lead to unexpected and unpleasant side effects. Suppose we write the following code:

    (A = B)++;

You should not really write the code like that, but just suppose we need it exactly that way. You would probably expect the following sequence of operations:

    A = B;
    A++;

However, because of the incorrect assignment operator, the actual order will be this:

    A = B;
    B++;

To avoid errors like that, pass the argument by a constant reference: code with such an implementation of the assignment operator would simply fail to compile.

Fixed code:

    class C {
      C& operator = (const C& other) {
        ....
        return *this;
      }
    };