#include <iostream>
using namespace std;
struct baseItem {
template <typename T> static T* createItem(int index) {
return new T(index);
}
};
struct Sword : public baseItem {
Sword(int n) { cout << "Creating a sword number " << n << endl; }
};
int main() {
Sword *s = baseItem::createItem<Sword>(123);
delete s;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKICAgIHN0cnVjdCBiYXNlSXRlbSB7CiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyBUKiBjcmVhdGVJdGVtKGludCBpbmRleCkgewogICAgICAgIAlyZXR1cm4gbmV3IFQoaW5kZXgpOwogICAgICAgIH0KICAgIH07CiAgICBzdHJ1Y3QgU3dvcmQgOiBwdWJsaWMgYmFzZUl0ZW0gewogICAgCVN3b3JkKGludCBuKSB7IGNvdXQgPDwgIkNyZWF0aW5nIGEgc3dvcmQgbnVtYmVyICIgPDwgbiA8PCBlbmRsOyB9CiAgICB9OwoKCmludCBtYWluKCkgewoJU3dvcmQgKnMgPSBiYXNlSXRlbTo6Y3JlYXRlSXRlbTxTd29yZD4oMTIzKTsKCWRlbGV0ZSBzOwoJcmV0dXJuIDA7Cn0=