The compiler explained this with a type mismatch error and showing the difference in the first set of parentheses. You need a member function pointer. That is a separate type from a 'plain'/free function pointer. (static member functions act like free functions in this sense, but that's not what you have.)
You can find plenty tutorials about these, but here's a quick reference. (I have to restrain myself not to de-capitalise these function and variable names because it just looks wrong, even without SO's auto-formatting.)
// Declare pointer-to-member-function of a given class and signature
std::string (RssCrawler::* GetHeadline)(const value&);
// Bind it to any method of the same class and signature
GetHeadline = &RssCrawler::Extract;
// Call it on a given instance of said class
std::cout << (someInstance.*GetHeadline)(someValue) << std::endl; // operator .*
Or you can do this to get a const initialised pointer, though I think that defeats the purpose of a function pointer, except for const-correctness when declaring them as arguments to other functions...
std::string (RssCrawler::*const GetHeadline)(const value&) {
&RssCrawler::Extract
}
staticmember function, and that's the problem. Coincidentally, I edited a note aboutstaticmember functions into my answer just 1 minute before you commented. :P Anyway, making it astaticmethod has the same issues as capturing the pointer-to-member in a lambda, in that it complicates things by meaning we must then also provide an instance to work with. As said in my answer to the OP's next question (in Linked) - it's much easier to have the lambda capturethisand use it to act 'on behalf of' an instance.