A referência ao método é ambígua ao usar lambdas e genéricos

Estou recebendo um erro no código a seguir, que acredito que não deveria estar lá ... Usando o JDK 8u40 para compilar esse código.

public class Ambiguous {
    public static void main(String[] args) {
        consumerIntFunctionTest(data -> {
            Arrays.sort(data);
        }, int[]::new);

        consumerIntFunctionTest(Arrays::sort, int[]::new);
    }

    private static <T> void consumerIntFunctionTest(final Consumer<T> consumer, final IntFunction<T> generator) {

    }

    private static <T> void consumerIntFunctionTest(final Function<T, ?> consumer, final IntFunction<T> generator) {

    }
}

O erro é o seguinte:

Erro: (17, 9) java: a referência a consumerIntFunctionTest é ambígua, tanto no método consumerIntFunctionTest (java.util.function.Consumer, java.util.function.IntFunction) em net.tuis.ubench.Ambiguous e no método consumerIntFunctionTest (java.util. function.Function, java.util.function.IntFunction) em net.tuis.ubench.Ambiguous match

O erro ocorre na seguinte linha:

consumerIntFunctionTest(Arrays::sort, int[]::new);

Eu acredito que não deve haver erro, pois todosArrays::sort referências são do tipovoid, e nenhum deles retorna um valor. Como você pode observar,faz trabalhar quando eu expandir explicitamente oConsumer<T> lambda.

Isso realmente é um bug no javac ou o JLS afirma que o lambda não pode ser expandido automaticamente nesse caso? Se for o último, eu ainda acho estranho, poisconsumerIntFunctionTest com como primeiro argumentoFunction<T, ?> não deve corresponder.

questionAnswers(1)

yourAnswerToTheQuestion