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
?