Obter ponteiro de função de std :: function ao usar std :: bind

Estou tentando usarstd::function em conjunção comstd::bindmas estou tendo alguns problemas.

Isso funciona:

#include <functional>
#include <iostream>

void print() {
    std::cout << 2;
}

int main() {
    std::function<void ()> foo = print;
    (*foo.target<void (*)()>())(); //prints 3
}

Isso cai na segunda linha demain:

#include <functional>
#include <iostream>

void print (int i) {
    std::cout << i;
}

int main() {
    std::function<void ()> foo = std::bind (print, 2);
    (*foo.target<void (*)()>())();
}

Eu estou realmente segurando ostd::function<void ()> e precisa ser capaz de retornar a função; não apenas chame. Espero que o uso seja algo assim:

#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 */
}

Existe alguma maneira de obter a função original para devolvê-lo, ou uma alternativa? Ele meio que entra em conflito com o tipo de retorno também,void (*)() corresponde a assinatura ligada muito bem.

questionAnswers(3)

yourAnswerToTheQuestion