interface A
{
    abstract <T> void foo();
}

interface B
{
    abstract <T,S> void foo();
}

class C<<error descr="'foo()' in 'B' clashes with 'foo()' in 'A'; both methods have same erasure, yet neither overrides the other"></error>T extends A & B>
{
    void bar(T x)
    {
        x.foo<error descr="Ambiguous method call: both 'A.foo()' and 'B.foo()' match">()</error>;
    }
}