Tipo de deducción, cuando se usa el puntero de función miembro como argumento de plantilla

Cuando quiero tener una función miembro como argumento de plantilla, ¿hay una manera de templetizarlo sin proporcionarCaller ¿tipo?

<code>struct Foo
{
    template <typename Caller, void (Caller::*Func)(int)>
    void call(Caller * c) { (c->*Func)(6); }
};

struct Bar
{
    void start() 
    {
        Foo f;
        f.call<Bar, &Bar::printNumber>(this);
               ^^^^  
    }

    void printNumber(int i) { std::cout << i; }
};

int main ()
{
    Bar b;
    b.start();
    return 0;
}
</code>

cuando intento

<code>template <void (Caller::*Func)(int), typename Caller>
void call(Caller * c) { (c->*Func)(6); }
</code>

y llámalo como

<code>f.call<&Bar::printNumber>(this);
</code>

estoy obteniendoCaller is not class... error.

Entonces, ¿hay una manera de dejar que el compilador deduzca el tipo de Caller?

Respuestas a la pregunta(1)

Su respuesta a la pregunta