In the body of a non-static member function, the keyword this is a non-lvalue expression whose value is the address of the object for which the function is called. However, in pre-standard C++, this was actually a pointer. Although the difference between a real pointer and a “non-lvalue expression whose value is the address of the object” may seem like hair-splitting, the distinction between the two is important because the new definition guarantees that programmers can’t change the value of this because it’s not an l-value. In other words, you can think of this as a function returning the address of its object, rather than the pointer itself. Assigning to this was a valid programming practice in the preliminary stages of C++; nowadays, it’s both illegal and impossible due to the new definition.