Expand description
An attribute macro to hack compound assignment.
§Motivation
ⓘ
use std::num::Wrapping;
fn main() {
let mut xs = vec![Wrapping(1), Wrapping(2)];
// OK
xs[1] = xs[0] + xs[1];
// Error
xs[1] += xs[0];
}
error[E0502]: cannot borrow `xs` as immutable because it is also borrowed as mutable
--> src/main.rs:10:14
|
10 | xs[1] += xs[0];
| ---------^^---
| | |
| | immutable borrow occurs here
| mutable borrow occurs here
| mutable borrow later used here
§Usage
use rhs_first_assign::rhs_first_assign;
use std::num::Wrapping;
#[rhs_first_assign]
fn main() {
let mut xs = vec![Wrapping(1), Wrapping(2)];
xs[1] = xs[0] + xs[1];
xs[1] += xs[0];
}
↓
use std::num::Wrapping;
fn main() {
let mut xs = vec![Wrapping(1), Wrapping(2)];
xs[1] = xs[0] + xs[1];
{
let __rhs_first_assign_rhs_l11_c10 = xs[0];
xs[1] += __rhs_first_assign_rhs_l11_c10;
};
}