#include <string>
#include <memory>
template<typename T>
class Base {
public:
template<typename... Args >
static std::shared_ptr<T> create(Args&&... args) {
return std::make_shared<T>(std::forward<Args>(args)...);
}
};
class Derived : public Base<Derived> {
public:
Derived(const std::string &str, int i) {}
};
int main() {
auto derived = Derived::create("text", 123);
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPG1lbW9yeT4KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmNsYXNzIEJhc2UgewpwdWJsaWM6CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzID4KICAgIHN0YXRpYyBzdGQ6OnNoYXJlZF9wdHI8VD4gY3JlYXRlKEFyZ3MmJi4uLiBhcmdzKSB7CiAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9zaGFyZWQ8VD4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKICAgIH0KfTsKCmNsYXNzIERlcml2ZWQgOiBwdWJsaWMgQmFzZTxEZXJpdmVkPiB7CnB1YmxpYzoKICAgIERlcml2ZWQoY29uc3Qgc3RkOjpzdHJpbmcgJnN0ciwgaW50IGkpIHt9Cn07CgppbnQgbWFpbigpIHsKICAgIGF1dG8gZGVyaXZlZCA9IERlcml2ZWQ6OmNyZWF0ZSgidGV4dCIsIDEyMyk7Cn0=