#include <iostream>
#include <string>

using namespace std;

class Wrapper
{
public:
	std::string&& get() &&
	{
		std::cout << "rvalue" << std::endl;
		return std::move(str);
	}
	
	const std::string& get() const &
	{
		std::cout << "lvalue" << std::endl;
		return str;
	}
private:
	std::string str;
};

std::string foo()
{
	Wrapper wrap;
	return wrap.get();
}

std::string bar()
{
	Wrapper wrap;
	return std::move(wrap.get());
}

std::string fooRvalue()
{
	return Wrapper().get();
}

std::string barRvalue()
{
	return std::move(Wrapper().get());
}

int main() {
	while(1)
	{
		std::string s = foo();
		std::string s2 = bar();
		std::string s3 = fooRvalue();
		std::string s4 = barRvalue();
	}
	return 0;
}