#include <iostream>
#include <cstring>
const char hw[] = "hello world!\n";
class mystring
{
public:
mystring() {std::cout<<"mystring()\n";}
mystring(mystring const&) {std::cout<<"mystring(mystring const&)\n";}
mystring(mystring &&) {std::cout<<"mystring(mystring &&)\n";}
~mystring() {std::cout<<"~mystring()\n";}
const char* begin() const {return hw;}
const char* end() const {return hw+std::strlen(hw);}
};
mystring&& silly_idea(mystring&& x)
{ return std::move(x); }
int main()
{
std::cout << "PRvalue:\n";
for(char c : mystring()) {
std::cout << c;
}
std::cout << "Xvalue:\n";
for(char c : silly_idea(mystring())) {
std::cout << c;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KCmNvbnN0IGNoYXIgaHdbXSA9ICJoZWxsbyB3b3JsZCFcbiI7CgpjbGFzcyBteXN0cmluZwp7CnB1YmxpYzoKICAgIG15c3RyaW5nKCkge3N0ZDo6Y291dDw8Im15c3RyaW5nKClcbiI7fQogICAgbXlzdHJpbmcobXlzdHJpbmcgY29uc3QmKSB7c3RkOjpjb3V0PDwibXlzdHJpbmcobXlzdHJpbmcgY29uc3QmKVxuIjt9CiAgICBteXN0cmluZyhteXN0cmluZyAmJikge3N0ZDo6Y291dDw8Im15c3RyaW5nKG15c3RyaW5nICYmKVxuIjt9CiAgICB+bXlzdHJpbmcoKSB7c3RkOjpjb3V0PDwifm15c3RyaW5nKClcbiI7fQogICAgY29uc3QgY2hhciogYmVnaW4oKSBjb25zdCB7cmV0dXJuIGh3O30KICAgIGNvbnN0IGNoYXIqIGVuZCgpICAgY29uc3Qge3JldHVybiBodytzdGQ6OnN0cmxlbihodyk7fQp9OwoKbXlzdHJpbmcmJiBzaWxseV9pZGVhKG15c3RyaW5nJiYgeCkKeyByZXR1cm4gc3RkOjptb3ZlKHgpOyB9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6Y291dCA8PCAiUFJ2YWx1ZTpcbiI7CiAgICBmb3IoY2hhciBjIDogbXlzdHJpbmcoKSkgewogICAgICAgIHN0ZDo6Y291dCA8PCBjOwogICAgfQogICAgc3RkOjpjb3V0IDw8ICJYdmFsdWU6XG4iOwogICAgZm9yKGNoYXIgYyA6IHNpbGx5X2lkZWEobXlzdHJpbmcoKSkpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgYzsKICAgIH0KfQ==