#include <iostream>
using namespace std;
struct Beta_ab { int a; };
struct Beta {
Beta_ab ab;
Beta_ab && getAB() && { cout << "1"; return move(ab); }
Beta_ab && getAB() { cout << "2"; return move(ab); }
};
int main() {
Beta b;
Beta_ab ab1 = b.getAB();
Beta_ab ab2 = Beta().getAB();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEJldGFfYWIgeyBpbnQgYTsgfTsKCnN0cnVjdCBCZXRhIHsKICBCZXRhX2FiIGFiOwogIEJldGFfYWIgJiYgZ2V0QUIoKSAmJiB7IGNvdXQgPDwgIjEiOyByZXR1cm4gbW92ZShhYik7IH0KICBCZXRhX2FiICYmIGdldEFCKCkgeyBjb3V0IDw8ICIyIjsgcmV0dXJuIG1vdmUoYWIpOyB9Cn07CgppbnQgbWFpbigpIHsKCUJldGEgYjsKCUJldGFfYWIgYWIxID0gYi5nZXRBQigpOwoJCglCZXRhX2FiIGFiMiA9IEJldGEoKS5nZXRBQigpOwoKCXJldHVybiAwOwp9
prog.cpp:9:14: error: ‘Beta_ab&& Beta::getAB()’ cannot be overloaded
Beta_ab && getAB() { cout << "2"; return move(ab); }
^~~~~
prog.cpp:8:14: error: with ‘Beta_ab&& Beta::getAB() &&’
Beta_ab && getAB() && { cout << "1"; return move(ab); }
^~~~~
prog.cpp: In function ‘int main()’:
prog.cpp:14:24: error: passing ‘Beta’ as ‘this’ argument discards qualifiers [-fpermissive]
Beta_ab ab1 = b.getAB();
^
prog.cpp:8:14: note: in call to ‘Beta_ab&& Beta::getAB() &&’
Beta_ab && getAB() && { cout << "1"; return move(ab); }
^~~~~