Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- trait A {
- fn get_a(&self) -> u32;
- }
- trait B<'a, 'b> {
- fn get_b(&'a self) -> &'b u32;
- }
- trait Common<'a, T> {
- fn get(&'a self) -> T;
- }
- struct SA {
- val : u32
- }
- impl A for SA {
- fn get_a(&self) -> u32 {
- self.val
- }
- }
- struct SB<'b> {
- val : &'b u32
- }
- impl<'a, 'b> B<'a, 'b> for SB<'b> {
- fn get_b(&'a self) -> &'b u32 {
- self.val
- }
- }
- impl<'a, T> Common<'a, u32> for T where T: A {
- fn get(&'a self) -> u32 {
- self.get_a()
- }
- }
- impl<'a, 'b, T> Common<'a, &'b u32> for T where T: B<'a, 'b> {
- fn get(&'a self) -> &'b u32 {
- self.get_b()
- }
- }
- fn main() {
- let a = SA { val: 42 };
- let b = SB { val: &13 };
- println!("{}", a.get());
- println!("{}", b.get());
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement