Deduzir o argumento de modelo da assinatura de chamada std :: function

Considere esta função de modelo:

template<typename ReturnT>
ReturnT foo(const std::function<ReturnT ()>& fun)
{
    return fun();
}

Por que não é possível que o compilador deduzaReturnT da assinatura de chamada passada?

bool bar() { /* ... */ }

foo<bool>(bar); // works
foo(bar); // error: no matching function call

questionAnswers(3)

yourAnswerToTheQuestion