std::move_only_function — std::function but move-only.
1#include <functional>23class Task {4 std::move_only_function<void()> func;5public:6 template<typename F>7 Task(F f) : func(std::move(f)) {}89 void operator()() {10 func();11 }12};1314Task t([] {15 std::cout << "Running task\n";16});1718Task t2 = std::move(t); // OK — move-only19// Task t3 = t; // Error — not copyable2021t2();2223// With state24std::move_only_function<int(int)> add = [x = 10](int y) {25 return x + y;26};2728std::cout << add(5); // 152930// Check if empty31if (add) { add(1); }3233// Reset34add = nullptr;
vs std::function: