Nur-Verschieben-Version von std :: function
weilstd::function
kopierbar ist, verlangt der Standard, dass Callables, mit denen er erstellt wurde, auch kopierbar sind:
n337 (20.8.11.2.1)
template<class F> function(F f);
Benötigt:F
soll CopyConstructible sein.f
Für Argumenttypen muss Callable (20.8.11.2) seinArgTypes
und RückgabetypR
. Der Kopierkonstrukteur und der Destruktor von A dürfen keine Ausnahmen auslösen. "
Dies impliziert, dass es nicht möglich ist, eine zu bildenstd::function
von einem nicht kopierbaren Bindungsobjekt oder einem Lambda, das einen Nur-Bewegungstyp erfasst hat, wie zstd::unique_ptr
.
Es scheint möglich, einen solchen Nur-Verschieben-Wrapper für Nur-Verschieben-Callables zu implementieren. Gibt es eine Standardbibliothek? Nur verschieben?std::function
Oder gibt es eine allgemeine Problemumgehung für dieses Problem?