Utilizando `std :: function <void (...)>` para llamar a una función no vacía

A hace un tiempo uséstd::function más o menos así:

std::function<void(int)> func = [](int i) -> int { return i; };

ásicamente, hice esto porque quería almacenar diferentes objetos de función en unstd::function, pero no quería restringir los tipos de retorno de estas funciones. Como esto parecía funcionar, lo seguí. Pero no estoy convencido de que sea seguro de usar, y no he podido encontrar ninguna documentación al respecto. ¿Alguien sabe si este uso es legítimo? O, más generalmente, cuáles son las reglas para el objeto que se puede asignar de forma segura a unstd::function?

Edita

ara aclarar, el problema que me preocupa es que la función lambda devuelve unint, mientrasfunc se declara con el tipo de retornovoid. No estoy seguro de si esto está bien, especialmente una vez que llame afunc() está hecho

Respuestas a la pregunta(6)

Su respuesta a la pregunta