#include <iostream>
#include <memory>


//C++14
std::unique_ptr<std::string> create_name()
{
	//auto ptr = std::make_unique<std::string>("Testname");
	//return std::move(ptr);

	//Компиль попробует вернуть через move конструктор/оператор присваивания.
	//Если оных нет, то вернёт через копирование, что сделать не выйдет.
	return std::make_unique<std::string>("Testname");
}

//C++11
using name_ptr = std::unique_ptr<std::string>;
name_ptr create_name_2()
{
	//auto ptr = ptr_string(new std::string("Testname"));
	//return std::move(ptr);
	//аналогично
	return name_ptr(new std::string("Testname"));
}

int main() 
{
	auto name = create_name();
	std::cout<<*name<<std::endl;
	
	name = create_name_2();
	std::cout<<*name<<std::endl;
	return 0;
}