// !CHECK_TYPE // !DIAGNOSTICS: -UNUSED_PARAMETER,-UNUSED_VARIABLE class A { class Inv fun > fooInv1(x: E) = x fun > fooInv2(x: E) = x class In fun > fooIn1(x: E) = x fun > fooIn2(x: E) = x class Out fun > fooOut1(x: E) = x fun > fooOut2(x: E) = x fun bar() { // F fooInv1>(Inv()) fooInv2<Inv>(Inv()) fooInv1(Inv()) fooInv2(Inv()) fooIn1>(In()) fooIn2>(In()) fooIn1(In()) fooIn2(In()) fooOut1>(Out()) fooOut2>(Out()) fooOut1(Out()) fooOut2(Out()) // Z fooInv1<Inv>(Inv()) fooInv2<Inv>(Inv()) fooInv1(Inv()) fooInv2(Inv()) fooIn1<In>(In()) fooIn2<In>(In()) fooIn1(In()) fooIn2(In()) fooOut1>(Out()) fooOut2>(Out()) fooOut1(Out()) fooOut2(Out()) // W fooInv1<Inv>(Inv()) fooInv2<Inv>(Inv()) fooInv1(Inv()) fooInv2(Inv()) fooIn1<In>(In()) fooIn2<In>(In()) fooIn1(In()) fooIn2(In()) fooOut1<Out>(Out()) fooOut2>(Out()) fooOut1(Out()) fooOut2(Out()) } }