#include <iostream>
#include <memory>

using namespace std;

struct Foo
{
	Foo(std::string v) : value(v) {}
	void Bar() { std::cout << "Hello, " << value << "!" << std::endl; }
	std::string value;
};

int main() {
	
	std::unique_ptr<Foo> FooPtr = std::make_unique<Foo>("World");
	FooPtr->Bar();
	FooPtr.get()->Bar();
	(*FooPtr).Bar();
	
	return 0;
}