#include <iostream>
#include <future>
#include <chrono>
using namespace std;
template <class F>
void call_async(F&& fun) {
thread_local char buf[sizeof(std::future<void>)] = {0};
auto fut = new(buf) std::future<void>();
*fut = std::async(std::launch::async, [fun]() {
fun();
});
}
void f()
{
std::this_thread::sleep_for(10ms);
cout << "LOL" << endl;
}
int main()
{
cout << "KEK" << endl;
call_async(f);
cout << "OMG" << endl;
std::this_thread::sleep_for(100ms);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnV0dXJlPgojaW5jbHVkZSA8Y2hyb25vPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGNsYXNzIEY+CnZvaWQgY2FsbF9hc3luYyhGJiYgZnVuKSB7Cgl0aHJlYWRfbG9jYWwgY2hhciBidWZbc2l6ZW9mKHN0ZDo6ZnV0dXJlPHZvaWQ+KV0gPSB7MH07CiAgICBhdXRvIGZ1dCA9IG5ldyhidWYpIHN0ZDo6ZnV0dXJlPHZvaWQ+KCk7CiAgICAqZnV0ID0gc3RkOjphc3luYyhzdGQ6OmxhdW5jaDo6YXN5bmMsIFtmdW5dKCkgewogICAgICAgIGZ1bigpOwogICAgfSk7Cn0KCnZvaWQgZigpCnsKCXN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2ZvcigxMG1zKTsKCWNvdXQgPDwgIkxPTCIgPDwgZW5kbDsKfQoKaW50IG1haW4oKSAKewoJY291dCA8PCAiS0VLIiA8PCBlbmRsOwoJY2FsbF9hc3luYyhmKTsKCWNvdXQgPDwgIk9NRyIgPDwgZW5kbDsKCXN0ZDo6dGhpc190aHJlYWQ6OnNsZWVwX2ZvcigxMDBtcyk7Cn0=