error[E0308]: mismatched types --> $DIR/issue-100605.rs:4:18 | LL | takes_option(&None); | ------------ ^^^^^ expected `Option<&String>`, found `&Option<_>` | | | arguments to this function are incorrect | = note: expected enum `Option<&String>` found reference `&Option<_>` note: function defined here --> $DIR/issue-100605.rs:1:4 | LL | fn takes_option(_arg: Option<&String>) {} | ^^^^^^^^^^^^ --------------------- help: consider removing the borrow | LL - takes_option(&None); LL + takes_option(None); | error[E0308]: mismatched types --> $DIR/issue-100605.rs:8:18 | LL | takes_option(&res); | ------------ ^^^^ expected `Option<&String>`, found `&Option` | | | arguments to this function are incorrect | = note: expected enum `Option<&String>` found reference `&Option` note: function defined here --> $DIR/issue-100605.rs:1:4 | LL | fn takes_option(_arg: Option<&String>) {} | ^^^^^^^^^^^^ --------------------- help: try using `.as_ref()` to convert `&Option` to `Option<&String>` | LL - takes_option(&res); LL + takes_option(res.as_ref()); | error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0308`.