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: you can convert from `&Option` to `Option<&T>` using `.as_ref()` | LL | takes_option(None.as_ref()); | ~~~~~~~~~~~~~ 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` | | help: you can convert from `&Option` to `Option<&T>` using `.as_ref()`: `res.as_ref()` | 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>) {} | ^^^^^^^^^^^^ --------------------- error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0308`.