#include <iostream>

class Final;

class MakeFinal
{
private:
	MakeFinal() {std::cout << "MakeFinal Hello World" << std::endl;};
	~MakeFinal() {std::cout << "MakeFinal Goodbye World" << std::endl;};
public:
	friend class Final;
};

class Final : virtual public MakeFinal
{
public:
	Final() {std::cout << "Final Hello World" << std::endl;};
	~Final() {std::cout << "Final Goodbye World" << std::endl;};
};

/* error Final not deriveable */
class Derived : public Final
{
public:
	Derived() {std::cout << "Derived Hello World" << std::endl;};
	~Derived() {std::cout << "Derived Goodbye World" << std::endl;};
};

int main()
{
	Final f;
}

