In order to prevent this oddity in syntax, all one must do is have the operator= method return a constant reference:
class T
{
...
public:
const T& operator=(const T&);
};
The main use of references is to avoid the overhead of passing/returning by value, while maintaining the same syntax (no pointer dereferencing). References should always be declared const unless the object they reference is meant to be altered.