Мне было интересно, есть ли причина, по которой оператор присваивания стандартных типов не имеет lvalue ref-qualified? Ни один из них.
Из-за этого мы можем писать такие вещи, как это:
std::string{} = "42";
std::string s = "hello " + std::string{"world"} = "oops!";
std::vector<int> v = { 1,2,3 };
std::move(v) = { 4,5,6 };
Если бы оператор присваивания был квалифицирован как lvalue ref, все эти примеры не скомпилировались бы.
Это потому, что есть много вещей, которые нужно изменить (но тогда это было для noexcept), и никто не написал предложение? Я не думаю, что люди пишут такой код, но разве библиотека не должна быть спроектирована так, чтобы она даже этого не позволяла?