error[E0631]: type mismatch in function arguments --> $DIR/fn-variance-1.rs:11:15 | LL | fn takes_mut(x: &mut isize) { } | --------------------------- found signature defined here ... LL | apply(&3, takes_mut); | ----- ^^^^^^^^^ expected due to this | | | required by a bound introduced by this call | = note: expected function signature `fn(&{integer}) -> _` found function signature `for<'a> fn(&'a mut isize) -> _` note: required by a bound in `apply` --> $DIR/fn-variance-1.rs:5:37 | LL | fn apply(t: T, f: F) where F: FnOnce(T) { | ^^^^^^^^^ required by this bound in `apply` error[E0631]: type mismatch in function arguments --> $DIR/fn-variance-1.rs:15:19 | LL | fn takes_imm(x: &isize) { } | ----------------------- found signature defined here ... LL | apply(&mut 3, takes_imm); | ----- ^^^^^^^^^ expected due to this | | | required by a bound introduced by this call | = note: expected function signature `fn(&mut {integer}) -> _` found function signature `for<'a> fn(&'a isize) -> _` note: required by a bound in `apply` --> $DIR/fn-variance-1.rs:5:37 | LL | fn apply(t: T, f: F) where F: FnOnce(T) { | ^^^^^^^^^ required by this bound in `apply` error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0631`.