Если вы определите оператора назначения, чтобы получить значение, вам не нужно (не нужно и не можете) определять оператора назначения, принимающего RVALUE-REFEFERE. Нет смысла в этом.
В целом, вам нужно предоставить перегрузку, принимающую RVALUE-ссылку, когда вам нужно отличить LVALUE от RVALUE, но в этом случае ваш выбор реализации означает, что вам не нужно делать это различие. Если у вас есть LVALUE или RVALUE, вы собираетесь создать аргумент и поменять содержимое.
String f();
String a;
a = f(); // with String& operator=(String)
В этом случае компилятор решит призыв a.operator=(f());
он поймет, что единственной причиной возврата является аргумент operator=
и выявит любую копию -это то, что функция приобрела ценность!