MyInt = 3;is O.K. because MyInt is an lvalue, but
3 = MyInt;isn't because 3 isn't. In C++ all manner of expressions, including function calls, can yield lvalues that can be assigned to. This can be a bit of a shock for a FORTRAN programmer only used to assignments to variables and array elements. For example, a dereferenced pointer and a reference can both be lvalues.