#include <iostream>
struct A
{
void WhoAmI() &&
{
std::cout << "I am rvalue reference\n";
}
void WhoAmI() const &&
{
std::cout << "I am const rvalue reference\n";
}
};
A operator+(A a1, A a2)
{
return {};
}
int main()
{
A a;
// a.WhoAmI(); // error
A& ra = a;
ra.WhoAmI(); // error
(a + a).WhoAmI(); // ok
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEEKewogIHZvaWQgV2hvQW1JKCkgJiYKICB7CiAgCXN0ZDo6Y291dCA8PCAiSSBhbSBydmFsdWUgcmVmZXJlbmNlXG4iOwogIH0KCiAgdm9pZCBXaG9BbUkoKSBjb25zdCAmJgogIHsKICAJc3RkOjpjb3V0IDw8ICJJIGFtIGNvbnN0IHJ2YWx1ZSByZWZlcmVuY2VcbiI7CiAgfQoJCn07CgoKQSBvcGVyYXRvcisoQSBhMSwgQSBhMikKewogIHJldHVybiB7fTsKfQoKaW50IG1haW4oKQp7CiAgQSBhOwovLyAgYS5XaG9BbUkoKTsgLy8gZXJyb3IKICAKICBBJiByYSA9IGE7CiAgcmEuV2hvQW1JKCk7IC8vIGVycm9yCiAgCiAgKGEgKyBhKS5XaG9BbUkoKTsgLy8gb2sKCiAgcmV0dXJuIDA7Cn0K