Melhora a segurança para marcar os operadores de atribuição como apenas o valor l?

E seT é um tipo de classe com a assinatura padrão para o operador de atribuição, então podemos escrever:

T const &ref = ( T{} = something ); 

que cria uma referência pendente. No entanto, com a assinatura:

T &operator=(T t) &

o código acima com referência dangling falhará ao compilar. Isso evitaria algumas situações em que retornamos um valor l que designa um objeto temporário - situações indesejáveis porque podem levar a referências pendentes.

Existe alguma razão para não fazer isso? estaríamos desativando casos de uso válidos para os operadores de atribuição?

Eu acho que os mesmos comentários também podem ser aplicados aos operadores de atribuição composta,+= etc. Um caso mais realista pode ser:

std::string const &s = std::string("Hello, ") += "world!";

onde o erro de digitação passaria despercebido até o UB em tempo de execução.

questionAnswers(1)

yourAnswerToTheQuestion