Utilizando `std :: function <void (…)>` para chamar a função non-void

á um tempo atrás eu useistd::function praticamente assim:

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

Basicamente, fiz isso porque queria armazenar diferentes objetos de função em umstd::function, mas não queria restringir os tipos de retorno dessas funções. Como isso pareceu funcionar, eu fui com ela. Mas não estou convencido de que seja seguro usá-lo e não consegui encontrar nenhuma documentação sobre ele. Alguém sabe se esse uso é legítimo? Ou, mais geralmente, quais são as regras para o objeto que podem ser atribuídas com segurança a umstd::function?

Edita

Para esclarecimento, o problema que me preocupa é que a função lambda retorne umint, enquantofunc é declarado com o tipo de retornovoid. Não tenho certeza se está tudo bem, especialmente quando uma chamada parafunc() é feito

questionAnswers(6)

yourAnswerToTheQuestion