import java.util.function.Supplier; 

class X { 
    public X() {} 
} 

public class Main { 
    static <T extends X> T foo( T reg ) { return reg; } 

    static <T extends X> T foo( Supplier<T> sup ) { return sup.get(); } 

    public static void main(String[] args) throws Exception { 
        X l = foo( X::new ); 
        System.out.println(l); 
    } 
} 
