[−][src]Crate rhs_first_assign
An attribute macro to hack compound assignment.
Motivation
ⓘThis example deliberately fails to compile
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; }; }
Attribute Macros
rhs_first_assign |