class C{ public: int i(){return 3;} }; void memfn(int (C::* const & func)()){} void fn(int (* const & func)()){} int main() { fn(&foo); //Works fn(foo); //Works memfn(&C::i); //Works memfn(C::i); //Doesn't Work } When passing a function pointer as a parameter, the address-of operator is optional on the function. Why does it not work if removed on a member function?
&) is actually an exception in the language. What you say about member functions is actually the "normal" and being able to remove the&on non-member functions is the exception.