Get function pointer from std::function when using std::bind
bind, c++, c++11, function-pointers
Solution
This is quite impossible. The whole reason that `std::function` exists is that function pointers suck horrifically and should never, ever, be used by anyone, ever again, except for the doomed souls bearing the Burning Standards of Hell C interoperation, because they cannot handle functions with state.
A `std::function<void()>` cannot, in the general case, be converted to a `void(*)()`. The only reason this works in the first example is because it happens to be a `void(*)()` originally.
Problem
I'm trying to use `std::function` in conjunction with `std::bind`, but I'm having some problems. This works: ``` #include <functional> #include <iostream> void print() { std::cout << 2; } int main() { std::function<void ()> foo = print; (*foo.target<void (*)()>())(); //prints 3 } ``` This crashes at the second line of `main`: ``` #include <functional> #include <iostream> void print (int i) { std::cout << i; } int main() { std::function<void ()> foo = std::bind (print, 2); (*foo.target<void (*)()>())(); } ``` I'm really holding the `std::function<void ()>` and need to be able to return the function; not just call it. I expect the usage would be something like this: ``` #include <functional> #include <iostream> void print (int i) { std::cout << i; } int main() { Container c (std::bind (print, 2)); //I would expect the original c.func() (3); //prints 3 if (c.func() == print) /* this is what I'm mostly getting at */ } ``` Is there any way to get the original function to return it, or an alternative? It does kind of conflict with the return type as well, as `void (*)()` matches the bound signature quite nicely.