Passar uma função como um parâmetro de modelo explícito

No exemplo de código abaixo, a chamada parafoo funciona, enquanto a chamada parabar falha.

Se eu comentar a chamada parabar, o código compila, o que me diz a definição debar em si é bom. Então, como seriabar ser chamado corretamente?

#include <iostream>

using namespace std;

int multiply(int x, int y)
{
    return x * y;
}

template <class F>
void foo(int x, int y, F f)
{
    cout << f(x, y) << endl;
}

template <class F>
void bar(int x, int y)
{
    cout << F(x, y) << endl;
}

int main()
{
    foo(3, 4, multiply); // works
    bar<multiply>(3, 4); // fails

    return 0;
}

questionAnswers(2)

yourAnswerToTheQuestion