#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIEJhc2UKewpwdWJsaWM6CiAgICBUKiBtZXRob2QoKQogICAgeyAKICAgIAlyZXR1cm4gbmV3IFQoKTsKICAgIH07Cn07CgpjbGFzcyBEZXJpdmVkIDogcHVibGljIEJhc2U8RGVyaXZlZD4KewpwdWJsaWM6CglleHBsaWNpdCBEZXJpdmVkKGludCBpPTApewoJCXRoaXMtPmk9aTsKCX0KCQogICAgaW50IGk7Cn07CgoKaW50IG1haW4oKSB7CglEZXJpdmVkIGQoMSk7CglzdGQ6OmNvdXQ8PGQuaTw8J1xuJzsKCWF1dG8gbmV3RCA9ZC5tZXRob2QoKTsKCXN0ZDo6Y291dDw8bmV3RC0+aTw8J1xuJzsKCWRlbGV0ZSBuZXdEOwoJcmV0dXJuIDA7Cn0=