Ramificação de operadores de atribuição com valores em vez de referências

Esta questão vem de questões levantadas poresta resposta.

Normalmente, definimos operadores de atribuição de cópia para o tipoT ComoT& operator=(const T&) e mova operadores de atribuição para o tipoT ComoT& operator=(T&&).

o entanto, o que acontece quando usamos um parâmetro value em vez de uma referênci

class T
{
public:
  T& operator=(T t);
};

Isto deve fazer com que T seja copiado e movido. No entanto, o que eu quero saber é quais são as ramificações de idioma paraT?

Especificamente

Ista conta como um operador de atribuição de cópia paraT, de acordo com a especificação?Ista conta como um operador de atribuição de movimento paraT, de acordo com a especificação?VaiT possui um operador de atribuição de cópia gerado pelo compiladoVaiT possui um operador de atribuição de movimentação gerado pelo compiladoComo isso afeta classes de características comostd::is_move_assignable?

questionAnswers(2)

yourAnswerToTheQuestion