#include <iostream>
using namespace std;

template <typename T>
class Base
{
public:
    T* method()
    { 
    	return new T();
    };
};

class Derived : public Base<Derived>
{
public:
	explicit Derived(int i=0){
		this->i=i;
	}
	
    int i;
};


int main() {
	Derived d(1);
	std::cout<<d.i<<'\n';
	auto newD =d.method();
	std::cout<<newD->i<<'\n';
	delete newD;
	return 0;
}