#include <iostream>
#include <string>
using namespace std;
void func(string &&a) { cout << "#1" << endl; }
void func(const string &&a) { cout << "#2" << endl; }
void func(int &&a) { cout << "#3" << endl; }
void func(const int &&a) { cout << "#4" << endl; }
int main()
{
func(string("1")); // call func(string &&)
func((const string)string("1")); // call func(const string &&)
func(1); // call func(int &&)
func((const int)1); // call func(int &&) not func(const int &&)
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgZnVuYyhzdHJpbmcgJiZhKSB7IGNvdXQgPDwgIiMxIiA8PCBlbmRsOyB9CnZvaWQgZnVuYyhjb25zdCBzdHJpbmcgJiZhKSB7IGNvdXQgPDwgIiMyIiA8PCBlbmRsOyB9CnZvaWQgZnVuYyhpbnQgJiZhKSB7IGNvdXQgPDwgIiMzIiA8PCBlbmRsOyB9CnZvaWQgZnVuYyhjb25zdCBpbnQgJiZhKSB7IGNvdXQgPDwgIiM0IiA8PCBlbmRsOyB9CgppbnQgbWFpbigpCnsKICBmdW5jKHN0cmluZygiMSIpKTsgICAgICAgICAgICAgICAgLy8gY2FsbCBmdW5jKHN0cmluZyAmJikgCiAgZnVuYygoY29uc3Qgc3RyaW5nKXN0cmluZygiMSIpKTsgIC8vIGNhbGwgZnVuYyhjb25zdCBzdHJpbmcgJiYpCiAgZnVuYygxKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGwgZnVuYyhpbnQgJiYpCiAgZnVuYygoY29uc3QgaW50KTEpOyAgICAgICAgICAgICAgIC8vIGNhbGwgZnVuYyhpbnQgJiYpIG5vdCBmdW5jKGNvbnN0IGludCAmJikKCiAgcmV0dXJuIDA7Cn0=