#include <iostream>
#include <string>
#include <tuple>
struct A
{
A() = default;
A(const A&) { std::cout << "copied" << std::endl; }
A(A&&) { std::cout << "moved" << std::endl; }
};
std::pair<A, A> get_pair()
{
std::cout << "in get_pair():" << std::endl;
std::pair<A, A> p;
return p;
}
std::tuple<A, A> get_tuple()
{
std::cout << "in get_tuple():" << std::endl;
std::pair<A, A> p;
return p;
}
std::tuple<A, A> get_tuple_moved()
{
std::cout << "in get_tuple_moved():" << std::endl;
std::pair<A, A> p;
return std::move(p);
}
int main(int, char*[])
{
get_pair();
get_tuple();
get_tuple_moved();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dHVwbGU+CgpzdHJ1Y3QgQQp7CiAgQSgpID0gZGVmYXVsdDsKICBBKGNvbnN0IEEmKSB7IHN0ZDo6Y291dCA8PCAiY29waWVkIiA8PCBzdGQ6OmVuZGw7IH0KICBBKEEmJikgeyBzdGQ6OmNvdXQgPDwgIm1vdmVkIiA8PCBzdGQ6OmVuZGw7IH0KfTsKCnN0ZDo6cGFpcjxBLCBBPiBnZXRfcGFpcigpCnsKICBzdGQ6OmNvdXQgPDwgImluIGdldF9wYWlyKCk6IiA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpwYWlyPEEsIEE+IHA7CiAgcmV0dXJuIHA7Cn0KCnN0ZDo6dHVwbGU8QSwgQT4gZ2V0X3R1cGxlKCkKewogIHN0ZDo6Y291dCA8PCAiaW4gZ2V0X3R1cGxlKCk6IiA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpwYWlyPEEsIEE+IHA7CiAgcmV0dXJuIHA7Cn0KCnN0ZDo6dHVwbGU8QSwgQT4gZ2V0X3R1cGxlX21vdmVkKCkKewogIHN0ZDo6Y291dCA8PCAiaW4gZ2V0X3R1cGxlX21vdmVkKCk6IiA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpwYWlyPEEsIEE+IHA7CiAgcmV0dXJuIHN0ZDo6bW92ZShwKTsKfQoKaW50IG1haW4oaW50LCBjaGFyKltdKQp7CiAgZ2V0X3BhaXIoKTsKICBnZXRfdHVwbGUoKTsKICBnZXRfdHVwbGVfbW92ZWQoKTsKfQo=