error[E0308]: mismatched types --> $DIR/as-ref.rs:7:29 | LL | opt.map(|arg| takes_ref(arg)); | --- --------- ^^^ expected `&Foo`, found struct `Foo` | | | | | arguments to this function are incorrect | help: consider using `as_ref` instead: `as_ref().map` | note: function defined here --> $DIR/as-ref.rs:3:4 | LL | fn takes_ref(_: &Foo) {} | ^^^^^^^^^ ------- error[E0308]: mismatched types --> $DIR/as-ref.rs:8:39 | LL | opt.and_then(|arg| Some(takes_ref(arg))); | -------- --------- ^^^ expected `&Foo`, found struct `Foo` | | | | | arguments to this function are incorrect | help: consider using `as_ref` instead: `as_ref().and_then` | note: function defined here --> $DIR/as-ref.rs:3:4 | LL | fn takes_ref(_: &Foo) {} | ^^^^^^^^^ ------- error[E0308]: mismatched types --> $DIR/as-ref.rs:10:29 | LL | opt.map(|arg| takes_ref(arg)); | --- --------- ^^^ expected `&Foo`, found struct `Foo` | | | | | arguments to this function are incorrect | help: consider using `as_ref` instead: `as_ref().map` | note: function defined here --> $DIR/as-ref.rs:3:4 | LL | fn takes_ref(_: &Foo) {} | ^^^^^^^^^ ------- error[E0308]: mismatched types --> $DIR/as-ref.rs:11:37 | LL | opt.and_then(|arg| Ok(takes_ref(arg))); | -------- --------- ^^^ expected `&Foo`, found struct `Foo` | | | | | arguments to this function are incorrect | help: consider using `as_ref` instead: `as_ref().and_then` | note: function defined here --> $DIR/as-ref.rs:3:4 | LL | fn takes_ref(_: &Foo) {} | ^^^^^^^^^ ------- error[E0308]: mismatched types --> $DIR/as-ref.rs:13:29 | LL | let y: Option<&usize> = x; | -------------- ^ | | | | | expected enum `Option`, found `&Option` | | help: you can convert from `&Option` to `Option<&T>` using `.as_ref()`: `x.as_ref()` | expected due to this | = note: expected enum `Option<&usize>` found reference `&Option` error[E0308]: mismatched types --> $DIR/as-ref.rs:15:37 | LL | let y: Result<&usize, &usize> = x; | ---------------------- ^ expected enum `Result`, found reference | | | expected due to this | = note: expected enum `Result<&usize, &usize>` found reference `&Result` help: you can convert from `&Result` to `Result<&T, &E>` using `.as_ref()` | LL | let y: Result<&usize, &usize> = x.as_ref(); | ~~~~~~~~~~ error[E0308]: mismatched types --> $DIR/as-ref.rs:19:36 | LL | let y: Result<&usize, usize> = x; | --------------------- ^ expected enum `Result`, found reference | | | expected due to this | = note: expected enum `Result<&usize, usize>` found reference `&Result` error: aborting due to 7 previous errors For more information about this error, try `rustc --explain E0308`.