Улучшает ли безопасность маркировку операторов присваивания только для lvalue?

ЕслиT это тип класса с подписью по умолчанию для оператора присваивания, тогда мы можем написать:

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

который создает висячую ссылку. Однако с подписью:

T &operator=(T t) &

приведенный выше код со свисающей ссылкой не удастся скомпилировать. Это предотвратит некоторые ситуации, когда мы возвращаем lvalue, который обозначает временный объект - нежелательные ситуации, потому что они могут привести к висящим ссылкам.

Есть ли причина не делать этого; Будем ли мы отключать любые допустимые варианты использования для операторов присваивания?

Я думаю, что те же комментарии могут относиться и к составным операторам присваивания,+= и т.д. Более реалистичным случаем может быть:

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

где опечатка останется незамеченной до времени выполнения UB.

Ответы на вопрос(1)

Ваш ответ на вопрос