use std::rc::Rc; trait Foo { fn foo(self: &Rc) -> usize; } trait Bar { fn foo(self: &Rc) -> usize where Self: Sized; fn bar(self: Rc) -> usize; } impl Foo for usize { fn foo(self: &Rc) -> usize { **self } } impl Bar for usize { fn foo(self: &Rc) -> usize { **self } fn bar(self: Rc) -> usize { *self } } fn make_foo() { let x = Rc::new(5usize) as Rc; //~^ ERROR E0038 } fn make_bar() { let x = Rc::new(5usize) as Rc; x.bar(); } fn main() {}