#include <iostream>
#include <memory>
#include <vector>

class base
{
public:
	virtual void foo() const
	{
		std::cout << "base!\n";
	}
};

class derived : public base
{
public:
	void foo() const final override
	{
		std::cout << "derived!\n";
	}
};

int main()
{
	std::vector<std::unique_ptr<base>> bases;
	bases.push_back(std::unique_ptr<derived>(new derived));
	// bases.push_back(std::make_unique<derived>()); // <- falls make_unique verfügbar ist
	bases.front()->foo();
}