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