Obtenga el puntero de función de std :: function cuando use std :: bind

Estoy tratando de usarstd::function en conjunción constd::bind, pero estoy teniendo algunos problemas.

Esto funciona:

#include <functional>
#include <iostream>

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

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

Esto se estrella en la segunda línea 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 (*)()>())();
}

Realmente estoy sosteniendo elstd::function<void ()> y necesitan poder devolver la función; no solo llamalo Espero que el uso sea algo como esto:

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

¿Hay alguna forma de obtener la función original para devolverla o una alternativa? También tiene algún tipo de conflicto con el tipo de retorno, ya quevoid (*)() coincide con la firma unida muy bien.

Respuestas a la pregunta(3)

Su respuesta a la pregunta