/*
 * @test /nodynamiccopyright/
 * @bug 8016081 8016178 8069545
 * @summary structural most specific and stuckness
 * @compile/fail/ref=T8016177g.out -XDrawDiagnostics T8016177g.java
 */


class Test {

    interface Function<X, Y> {
        Y m(X x);
    }

    interface Box<T> {
        T get();
        <R> R map(Function<T,R> f);
    }

    static class Person {
        Person(String name) { }
    }

    void print(Object arg) { }
    void print(String arg) { }

    int abs(int a) { return 0; }
    long abs(long a) { return 0; }
    float abs(float a) { return 0; }
    double abs(double a) { return 0; }

    void test() {
        Box<String> b = null;
        print(b.map(s -> new Person(s)));
        int i = abs(b.map(s -> Double.valueOf(s)));
    }
}
