#include <string>
#include <iostream>
std::string &concat( std::string &a, const std::string &b ) {
a += b;
return a;
}
std::string &concat( std::string &&a, const std::string &b ) {
a += b;
return a;
}
int main( void ) {
std::string a = "abc";
std::string b = "def";
std::cout << concat( a, b ) << std::endl;
std::cout << concat( a, (a + b) ) << std::endl;
std::cout << concat( (a + b), b ) << std::endl;
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RkOjpzdHJpbmcgJmNvbmNhdCggc3RkOjpzdHJpbmcgJmEsIGNvbnN0IHN0ZDo6c3RyaW5nICZiICkgewogICAgYSArPSBiOwogICAgcmV0dXJuIGE7Cn0Kc3RkOjpzdHJpbmcgJmNvbmNhdCggc3RkOjpzdHJpbmcgJiZhLCBjb25zdCBzdGQ6OnN0cmluZyAmYiApIHsKICAgIGEgKz0gYjsKICAgIHJldHVybiBhOwp9CgppbnQgbWFpbiggdm9pZCApIHsKICAgIHN0ZDo6c3RyaW5nIGEgPSAiYWJjIjsKICAgIHN0ZDo6c3RyaW5nIGIgPSAiZGVmIjsKICAgIHN0ZDo6Y291dCA8PCBjb25jYXQoIGEsIGIgKSA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OmNvdXQgPDwgY29uY2F0KCBhLCAoYSArIGIpICkgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8IGNvbmNhdCggKGEgKyBiKSwgYiApIDw8IHN0ZDo6ZW5kbDsKICAgIHJldHVybiAwOwp9