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.