| //@ check-pass | |
| // Some trait with a function that returns a slice: | |
| pub trait AsSlice { | |
| type Element; | |
| fn as_slice(&self) -> &[Self::Element]; | |
| } | |
| // Some type | |
| pub struct A<Cont>(Cont); | |
| // Here we say that if A wraps a slice, then it implements AsSlice | |
| impl<'a, Element> AsSlice for A<&'a [Element]> { | |
| type Element = Element; | |
| fn as_slice(&self) -> &[Self::Element] { | |
| self.0 | |
| } | |
| } | |
| impl<Cont> A<Cont> { | |
| // We want this function to work | |
| pub fn failing<Coef>(&self) | |
| where | |
| Self: AsSlice<Element = Coef>, | |
| { | |
| self.as_ref_a().as_ref_a(); | |
| } | |
| pub fn as_ref_a<Coef>(&self) -> A<&[<Self as AsSlice>::Element]> | |
| where | |
| Self: AsSlice<Element = Coef>, | |
| { | |
| A(self.as_slice()) | |
| } | |
| } | |
| fn main() {} |