template <template <typename> class Derived, typename T>
class Base{
public:
Derived<T> processing(){
return *static_cast<Derived<T> *>(this);
}
};
template <typename T>
class Derived : public Base<Derived, T> {
};
int main() {
Derived<int> derived1;
Derived<int> derived2 = derived1.processing();
return 0;
}
dGVtcGxhdGUgPHRlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3MgRGVyaXZlZCwgdHlwZW5hbWUgVD4KY2xhc3MgQmFzZXsKICBwdWJsaWM6CiAgICAgIERlcml2ZWQ8VD4gcHJvY2Vzc2luZygpewogICAgICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8RGVyaXZlZDxUPiAqPih0aGlzKTsKICAgICAgfQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIERlcml2ZWQgOiBwdWJsaWMgQmFzZTxEZXJpdmVkLCBUPiB7Cn07CgppbnQgbWFpbigpIHsKICBEZXJpdmVkPGludD4gZGVyaXZlZDE7CiAgRGVyaXZlZDxpbnQ+IGRlcml2ZWQyID0gZGVyaXZlZDEucHJvY2Vzc2luZygpOwogIHJldHVybiAwOwp9Cg==