Почему это значение не повышается до значения l, как указано в ссылке?
Rust Reference говорит:
Левый операнд выражения присваивания или составного присваивания является lvalue-контекстом, как и единственный операнд унарного заимствования.
[...]
Когда rvalue используется в контексте lvalue, вместо него создается временное безымянное lvalue.
Это продвижение rvalue, очевидно, работает с заимствованиями:
let ref_to_i32 = &27; // a temporary i32 variable with value 27 is created
Но это, кажется, не работает в задании (хотя ссылка говорит овсе lvalue контексты, а не просто заимствования)
27 = 28; // error[E0070]: invalid left-hand side expression
описание ошибки E0070 не упоминает об этом промоушене. Является ли это ошибкой в ссылке или действительно есть какой-то способ вызвать повышение значения с помощью выражений присваивания или составного присваивания?
Существует третий тип контекста lvalue, который ссылка также описывает неправильно. Всякий раз, когда есть шаблон сref
в нем привязка левого значения к этому шаблону является контекстом lvalue. Оказывается, продвижение работает в этом случае:
let ref x = 3; // works
Очевидно, что продвижение не работает только для (составных) заданий?