#include <iostream>
using namespace std;
template<typename T>
struct Base {
int propertyBase;
T &setPropertyBase(int propertyBase) {
this->propertyBase = propertyBase;
return (T &) *this;
}
};
struct Derived : public Base<Derived> {
int propertyDerived;
Derived &setPropertyDerived(int propertyDerived) {
this->propertyDerived = propertyDerived;
return *this;
}
};
int main() {
Derived derived = Derived()
.setPropertyDerived(77)
.setPropertyBase(7);
cout << derived.propertyBase << endl;
cout << derived.propertyDerived << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IEJhc2UgewoJaW50IHByb3BlcnR5QmFzZTsKCglUICZzZXRQcm9wZXJ0eUJhc2UoaW50IHByb3BlcnR5QmFzZSkgewoJCXRoaXMtPnByb3BlcnR5QmFzZSA9IHByb3BlcnR5QmFzZTsKCQlyZXR1cm4gKFQgJikgKnRoaXM7Cgl9Cn07CgpzdHJ1Y3QgRGVyaXZlZCA6IHB1YmxpYyBCYXNlPERlcml2ZWQ+IHsKCWludCBwcm9wZXJ0eURlcml2ZWQ7CgoJRGVyaXZlZCAmc2V0UHJvcGVydHlEZXJpdmVkKGludCBwcm9wZXJ0eURlcml2ZWQpIHsKCQl0aGlzLT5wcm9wZXJ0eURlcml2ZWQgPSBwcm9wZXJ0eURlcml2ZWQ7CgkJcmV0dXJuICp0aGlzOwoJfQp9OwoKaW50IG1haW4oKSB7CglEZXJpdmVkIGRlcml2ZWQgPSBEZXJpdmVkKCkKCQkJLnNldFByb3BlcnR5RGVyaXZlZCg3NykKCQkJLnNldFByb3BlcnR5QmFzZSg3KTsKCWNvdXQgPDwgZGVyaXZlZC5wcm9wZXJ0eUJhc2UgPDwgZW5kbDsKCWNvdXQgPDwgZGVyaXZlZC5wcm9wZXJ0eURlcml2ZWQgPDwgZW5kbDsKCXJldHVybiAwOwp9