La función miembro templada typedefs no se compilará

#include <iostream>
#include <string>
using namespace std;

void printstr( const string & s ) { cout << s << endl; }

template < typename A >
class Test
{
public:
    typedef void (*Func)( const A & );
};

typedef void (*Func)( const string & );

template < typename A >
void bind(
        Test< A >::Func f,           //<---- does NOT compile
        //Func f,                    //<---- compiles & works!
        //void (*f)( const A & ),    //<---- compiles & works!
        const A & a) { f( a ); }


int main( )
{
    bind( printstr, string("test") );
    return 0;
}

En el código anterior, estoy tratando de usar un puntero de función typedef de otra clase. Como se muestra, no se compila, pero con cualquiera de las otras dos líneas sin comentar en lugar delTest< A >::Func f, línea, se compila bien! ¿Es esto algo que no puedo hacer en C ++? ¿Qué sintaxis se necesita?

Usando g ++ 4.4.3, obtengo

test.cpp:20: error: variable or field "bind" declared void
test.cpp:20: error: expected ")" before "f"
test.cpp:23: error: expected primary-expression before "const"

Respuestas a la pregunta(1)

Su respuesta a la pregunta