You declared the function foo as static.
It is therefore not a member function of a Foo instance.
This code works:
class Foo
{
public:
static void foo ( void ){}
void foo2() {}
};
void foo ( void(*)(void) ){}
void fooMember ( void(Foo::*)(void) ){}
int main()
{
foo(&Foo::foo);
fooMember(&Foo::foo2);
return 0;
}
EDIT: I updated the description and added a piece of code.