Выражение c1+c2+c3+c4
анализируется и оценивается, как если бы
Complex c5 = operator+(c1, operator+(c2, operator+(c3, c4)));
operator+(c3, c4)
создает и возвращает временный Complex
объект: значение.
C ++ запрещает привязывать rvalue к неконстантной lvalue-ссылке .
Но operator+(Complex&, Complex&)
принимает неконстантную lvalue-ссылку. Отсюда и сообщение об ошибке.
С другой стороны, operator+(Complex const&, Complex const&)
принимает ссылки на постоянные значения.