Si vous définissez l'opérateur d'affectation pour prendre une valeur, vous ne devez pas (ne pas avoir besoin) de définir l'opérateur d'affectation prenant une référence RValue. Il n'y a pas de problème à cela.
En général, il vous suffit de fournir une surcharge en prenant une référence RValue lorsque vous avez besoin de différencier un LVALUE d'une réalité, mais dans ce cas, votre choix de mise en œuvre signifie que vous n'avez pas besoin de faire cette distinction. Que vous ayez un LVALUE ou un RValue, vous allez créer l'argument et échanger le contenu.
String f();
String a;
a = f(); // with String& operator=(String)
Dans ce cas, le compilateur résoudra l'appel pour être a.operator=(f());
Il se rendra compte que la seule raison de la valeur de retour est l'argument operator=
et élirera n'importe quelle copie - c'est le but de faire en sorte que la fonction prenne une valeur en premier lieu!