| // run-pass |
| |
| use { |
| std::{ |
| rc::Rc, |
| sync::Arc, |
| }, |
| }; |
| |
| #[derive(Default)] |
| struct Ty; |
| |
| trait Trait { |
| fn receive_trait(self: &Arc<Rc<Box<Self>>>) -> u32; |
| } |
| |
| const TRAIT_MAGIC: u32 = 42; |
| const INHERENT_MAGIC: u32 = 1995; |
| |
| impl Trait for Ty { |
| fn receive_trait(self: &Arc<Rc<Box<Self>>>) -> u32 { |
| TRAIT_MAGIC |
| } |
| } |
| |
| impl Ty { |
| fn receive_inherent(self: &Arc<Rc<Box<Self>>>) -> u32 { |
| INHERENT_MAGIC |
| } |
| } |
| |
| fn main() { |
| let ty = <Arc<Rc<Box<Ty>>>>::default(); |
| assert_eq!(TRAIT_MAGIC, ty.receive_trait()); |
| assert_eq!(INHERENT_MAGIC, ty.receive_inherent()); |
| } |