#include <iostream>
#include <string>
#include <utility>
using namespace std;
struct A {
string x;
};
struct B {
string x;
};
void func(const pair<A, B>& mypair) {
cout << mypair.first.x << ", " << mypair.second.x << endl;
}
int main() {
A a;
a.x = "test A";
B b;
b.x = "test B";
func(make_pair(a, b));
cout << a.x << ", " << b.x << endl; // a and a are still here!
func(make_pair(move(a), move(b)));
cout << a.x << ", " << b.x << endl; // a and a are now reset becuase they are moved!
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dXRpbGl0eT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBBIHsKICBzdHJpbmcgeDsKfTsKCnN0cnVjdCBCIHsKICBzdHJpbmcgeDsKfTsKCnZvaWQgZnVuYyhjb25zdCBwYWlyPEEsIEI+JiBteXBhaXIpIHsKICBjb3V0IDw8IG15cGFpci5maXJzdC54IDw8ICIsICIgPDwgbXlwYWlyLnNlY29uZC54IDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewogIEEgYTsKICBhLnggPSAidGVzdCBBIjsKICBCIGI7CiAgYi54ID0gInRlc3QgQiI7CgogIGZ1bmMobWFrZV9wYWlyKGEsIGIpKTsKICBjb3V0IDw8IGEueCA8PCAiLCAiIDw8IGIueCA8PCBlbmRsOyAvLyBhIGFuZCBhIGFyZSBzdGlsbCBoZXJlIQoKICBmdW5jKG1ha2VfcGFpcihtb3ZlKGEpLCBtb3ZlKGIpKSk7CiAgY291dCA8PCBhLnggPDwgIiwgIiA8PCBiLnggPDwgZW5kbDsgLy8gYSBhbmQgYSBhcmUgbm93IHJlc2V0IGJlY3Vhc2UgdGhleSBhcmUgbW92ZWQhCn0K