¿Mejora la seguridad para marcar a los operadores de asignación como solo de valor?

SiT es un tipo de clase con la firma predeterminada para el operador de asignación, entonces podemos escribir:

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

que crea una referencia colgante. Sin embargo, con la firma:

T &operator=(T t) &

el código anterior con referencia colgante no se compilará. Esto evitaría algunas situaciones en las que devolvemos un valor l que designa un objeto temporal, situaciones indeseables porque pueden conducir a referencias colgantes.

¿Hay alguna razón para no hacer esto? ¿estaríamos desactivando cualquier caso de uso válido para los operadores de asignación?

Creo que los mismos comentarios pueden aplicarse también a los operadores de asignación compuesta,+= etc. Un caso más realista podría ser:

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

donde el error tipográfico pasaría desapercibido hasta el tiempo de ejecución UB.

Respuestas a la pregunta(1)

Su respuesta a la pregunta