#include <iostream>
#include <thread>
#include <functional>
class MyClass {
public:
MyClass() {
std::cout << "construction in: " << std::this_thread::get_id() << std::endl;
}
MyClass(MyClass const&) {
std::cout << "copy in: " << std::this_thread::get_id() << std::endl;
}
MyClass(MyClass &&) {
std::cout << "move in: " << std::this_thread::get_id() << std::endl;
}
};
void f(MyClass V) {}
int main() {
{
MyClass V;
std::thread t1(f, V);
t1.join();
}
std::cout << "----------\n";
{
MyClass V;
std::thread t2(f, std::ref(V));
t2.join();
}
std::cout << "----------\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCmNsYXNzIE15Q2xhc3MgewpwdWJsaWM6CiAgTXlDbGFzcygpIHsKICAgIHN0ZDo6Y291dCA8PCAiY29uc3RydWN0aW9uIGluOiAiIDw8IHN0ZDo6dGhpc190aHJlYWQ6OmdldF9pZCgpIDw8IHN0ZDo6ZW5kbDsKICB9CiAgCiAgTXlDbGFzcyhNeUNsYXNzIGNvbnN0JikgewogICAgc3RkOjpjb3V0IDw8ICJjb3B5IGluOiAiIDw8IHN0ZDo6dGhpc190aHJlYWQ6OmdldF9pZCgpIDw8IHN0ZDo6ZW5kbDsKICB9CQogIAogIE15Q2xhc3MoTXlDbGFzcyAmJikgewogICAgc3RkOjpjb3V0IDw8ICJtb3ZlIGluOiAiIDw8IHN0ZDo6dGhpc190aHJlYWQ6OmdldF9pZCgpIDw8IHN0ZDo6ZW5kbDsKICB9Cn07Cgp2b2lkIGYoTXlDbGFzcyBWKSB7fQoKaW50IG1haW4oKSB7CiAgewogICAgTXlDbGFzcyBWOwogICAgc3RkOjp0aHJlYWQgdDEoZiwgVik7CiAgICB0MS5qb2luKCk7CiAgfQogIHN0ZDo6Y291dCA8PCAiLS0tLS0tLS0tLVxuIjsKICB7CiAgICBNeUNsYXNzIFY7CiAgICBzdGQ6OnRocmVhZCB0MihmLCBzdGQ6OnJlZihWKSk7CiAgICB0Mi5qb2luKCk7CiAgfQogIHN0ZDo6Y291dCA8PCAiLS0tLS0tLS0tLVxuIjsKICAKCiAgcmV0dXJuIDA7Cn0K