error[E0053]: method `values` has an incompatible type for trait --> $DIR/mismatched-map-under-self.rs:10:15 | LL | fn values(self) -> Self::Values { | ^^^^ | | | expected `&Option`, found `Option` | help: change the self-receiver type to match the trait: `&self` | note: type in trait --> $DIR/mismatched-map-under-self.rs:4:15 | LL | fn values(&self) -> Self::Values; | ^^^^^ = note: expected signature `fn(&Option<_>)` found signature `fn(Option<_>)` error[E0631]: type mismatch in function arguments --> $DIR/mismatched-map-under-self.rs:12:18 | LL | fn values(&self) -> Self::Values; | --------------------------------- found signature defined here ... LL | self.map(Insertable::values).unwrap_or_default() | --- ^^^^^^^^^^^^^^^^^^ expected due to this | | | required by a bound introduced by this call | = note: expected function signature `fn(T) -> _` found function signature `for<'a> fn(&'a _) -> _` note: required by a bound in `Option::::map` --> $SRC_DIR/core/src/option.rs:LL:COL help: consider wrapping the function in a closure | LL | self.map(|arg0: T| Insertable::values(&arg0)).unwrap_or_default() | +++++++++ +++++++ error: aborting due to 2 previous errors Some errors have detailed explanations: E0053, E0631. For more information about an error, try `rustc --explain E0053`.