#include <string>
#include <iostream>
struct S {
std::string a;
int b;
S(const S&) = default;
S(S&&) = default;
S& operator=(const S&) = default;
S& operator=(S&&) = default; // not required here but should be added for completeness
~S() {
std::cout << a << " " << b << std::endl;
}
};
S f(S arg) {
S s0{};
S s1(s0); //s1 {s0}; in the book
s1 = arg;
return s1;
}
int main()
{
S s3{"tool",42};
f(s3);
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IFMgewogICAgc3RkOjpzdHJpbmcgYTsKICAgIGludCBiOwogICAgCiAgICBTKGNvbnN0IFMmKSA9IGRlZmF1bHQ7CiAgICBTKFMmJikgPSBkZWZhdWx0OwogICAgUyYgb3BlcmF0b3I9KGNvbnN0IFMmKSA9IGRlZmF1bHQ7CiAgICBTJiBvcGVyYXRvcj0oUyYmKSA9IGRlZmF1bHQ7IC8vIG5vdCByZXF1aXJlZCBoZXJlIGJ1dCBzaG91bGQgYmUgYWRkZWQgZm9yIGNvbXBsZXRlbmVzcwogICAgCiAgICB+UygpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgYSA8PCAiICIgPDwgYiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgpTIGYoUyBhcmcpIHsKICAgIFMgczB7fTsKICAgIFMgczEoczApOyAvL3MxIHtzMH07IGluIHRoZSBib29rCiAgICBzMSA9IGFyZzsKICAgIHJldHVybiBzMTsKfQoKaW50IG1haW4oKQp7CiAgICBTIHMzeyJ0b29sIiw0Mn07CiAgICBmKHMzKTsKfQ==