In order to prevent this oddity in syntax, all one must do is have the operator= method return a constant reference:

  class T
    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.