/// let mut t = (0,1);
///
/// let c = || {
- /// println!("{t}"); // L1
+ /// println!("{t:?}"); // L1
/// t.1 = 4; // L2
/// };
/// ```
/// let x = 5;
///
/// let c = || {
- /// let _ = x
+ /// let _ = x;
/// };
/// ```
///
/// is borrowing or mutating a mutable referent, e.g.:
///
/// ```
- /// let x: &mut isize = ...;
+ /// let mut z = 3;
+ /// let x: &mut isize = &mut z;
/// let y = || *x += 5;
/// ```
///
/// If we were to try to translate this closure into a more explicit
/// form, we'd encounter an error with the code as written:
///
- /// ```
- /// struct Env { x: & &mut isize }
- /// let x: &mut isize = ...;
- /// let y = (&mut Env { &x }, fn_ptr); // Closure is pair of env and fn
+ /// ```compile_fail,E0594
+ /// struct Env<'a> { x: &'a &'a mut isize }
+ /// let mut z = 3;
+ /// let x: &mut isize = &mut z;
+ /// let y = (&mut Env { x: &x }, fn_ptr); // Closure is pair of env and fn
/// fn fn_ptr(env: &mut Env) { **env.x += 5; }
/// ```
///
/// in an aliasable location. To solve, you'd have to translate with
/// an `&mut` borrow:
///
- /// ```
- /// struct Env { x: &mut &mut isize }
- /// let x: &mut isize = ...;
- /// let y = (&mut Env { &mut x }, fn_ptr); // changed from &x to &mut x
+ /// ```compile_fail,E0596
+ /// struct Env<'a> { x: &'a mut &'a mut isize }
+ /// let mut z = 3;
+ /// let x: &mut isize = &mut z;
+ /// let y = (&mut Env { x: &mut x }, fn_ptr); // changed from &x to &mut x
/// fn fn_ptr(env: &mut Env) { **env.x += 5; }
/// ```
///