// build-pass struct Inv<'a>(&'a mut &'a ()); enum Foo<T> { Bar, Var(T), } type Supertype = Foo<for<'a> fn(Inv<'a>, Inv<'a>)>; fn foo(x: Foo<for<'a, 'b> fn(Inv<'a>, Inv<'b>)>) { match x { Supertype::Bar => {} Supertype::Var(x) => {} } } fn foo_nested(x: Foo<Foo<for<'a, 'b> fn(Inv<'a>, Inv<'b>)>>) { match x { Foo::Bar => {} Foo::Var(Supertype::Bar) => {} Foo::Var(Supertype::Var(x)) => {} } } fn main() {}