#include #include struct X { void foo(int, std::string const&); std::string bar(std::string const&); }; X x; auto f1 = std::async(&X::foo, &x, 42, "hello"); auto f2 = std::async(&X::bar, x, "goodbye"); struct Y { double operator()(double); }; Y y; auto f3 = std::async(Y(), 3.141); auto f4 = std::async(std::ref(y), 2.718); X baz(X&); auto f6 = std::async(baz, std::ref(x)); class move_only { public: move_only(); move_only(move_only&&); move_only(move_only const&) = delete; move_only& operator =(move_only&&); move_only& operator=(move_only const&) = delete; void operator()(); }; auto f5 = std::async(move_only());