#include <iostream>
class B //a move only type
{
B( const B& )=delete;
B& operator=( const B& ) = delete;
public:
B( B&& )
{
std::cout << "B&&\n";
}
B& operator=( B&& )
{
std::cout << "B=\n";
return *this;
}
B(){ std::cout << "B()\n"; }
};
struct error //the other parts are stripped of for simplicity.
{
B get()
{
return std::move(b);
}
private :
B b{};// B is a move only type.
};
int main()
{
error er{};
er.get();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQiAvL2EgbW92ZSBvbmx5IHR5cGUKewogICAgQiggY29uc3QgQiYgKT1kZWxldGU7CiAgICBCJiBvcGVyYXRvcj0oIGNvbnN0IEImICkgPSBkZWxldGU7CnB1YmxpYzoKICAgIEIoIEImJiApCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJCJiZcbiI7CiAgICB9CgogICAgQiYgb3BlcmF0b3I9KCBCJiYgKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiQj1cbiI7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsgCiAgICB9CiAgICBCKCl7IHN0ZDo6Y291dCA8PCAiQigpXG4iOyB9Cn07CgpzdHJ1Y3QgZXJyb3IgIC8vdGhlIG90aGVyIHBhcnRzIGFyZSBzdHJpcHBlZCBvZiBmb3Igc2ltcGxpY2l0eS4KewogICAgQiBnZXQoKQogICAgewogICAgICAgIHJldHVybiBzdGQ6Om1vdmUoYik7CiAgICB9CnByaXZhdGUgOgogICAgQiBie307Ly8gQiBpcyBhIG1vdmUgb25seSB0eXBlLgp9OwoKaW50IG1haW4oKQp7CiAgZXJyb3IgZXJ7fTsKICBlci5nZXQoKTsKfQ==