blob: 4a9b7f74dd6faf73557c3dd953847b09a2f6f2ca [file] [log] [blame]
//@ check-pass
#![allow(dead_code)]
trait Trait1<T, U> {
fn f1(self) -> U;
}
trait Trait2 {
type T;
type U: Trait2<T = Self::T>;
fn f2(f: impl FnOnce(&Self::U));
}
fn f3<T: Trait2>() -> impl Trait1<T, T::T> {
Struct1
}
struct Struct1;
impl<T: Trait2> Trait1<T, T::T> for Struct1 {
fn f1(self) -> T::T {
unimplemented!()
}
}
fn f4<T: Trait2>() {
T::f2(|_| {
f3::<T::U>().f1();
});
}
fn main() {}