//@ check-fail
//
// regression test for issue 52893
trait At<Name> {
    type AtRes;
    fn at(self) -> Self::AtRes;
}

trait Push<T> {
    type PushRes;
    fn push(self, other: T) -> Self::PushRes;
}

trait AddClass<Name, F> {
    type AddRes;
    fn init(self, func: F);
}

trait ToRef {
    type RefRes;
    fn to_ref(&self) -> Self::RefRes;
}

struct Class<P>(P);

impl<P> Class<P> {
    fn with<Name, F>(self) -> <Self as AddClass<Name, F>>::AddRes
    where
        Self: AddClass<Name, F>,
    {
        todo!()
    }

    fn from<F>(self) -> <Self as AddClass<P, F>>::AddRes
    where
        Self: AddClass<P, F>,
    {
        todo!()
    }
}

impl<F, Name, P> AddClass<Name, F> for Class<P>
where
    Self: At<Name>,
    <Self as At<Name>>::AtRes: Push<F>,
    <<Self as At<Name>>::AtRes as Push<F>>::PushRes: ToRef<RefRes = Self> + Push<F>,
{
    type AddRes = ();

    fn init(self, func: F) {
        let builder = self.at().push(func);
        let output = builder.to_ref();
        builder.push(output); //~ ERROR mismatched types [E0308]
    }
}

fn main() {}
