Versão somente mover da função std ::
Porquestd::function
é copiável, o padrão exige que as chamadas usadas para construí-lo também sejam copiáveis:
n337 (20.8.11.2.1)
template<class F> function(F f);
Requer:F
deve ser CopyConstructible.f
deve ser Callable (20.8.11.2) para tipos de argumentoArgTypes
e tipo de retornoR
. O construtor de cópias e o destruidor de A não devem lançar exceções.
Isso implica que não é possível formar umstd::function
de um objeto de ligação não copiável ou de uma lambda que capturou um tipo somente de movimentação, comostd::unique_ptr
.
Parece possível implementar um invólucro de somente movimentação para chamadas que podem ser movidas. Existe um equivalente somente de movimentação da biblioteca padrão parastd::function
ou, existe uma solução comum para esse problema?