38 lines
767 B
Rust
38 lines
767 B
Rust
//@ 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() {}
|