#include <iostream>
#include <memory>
struct Base{
virtual std::unique_ptr<Base> clone() const = 0;
};
struct Derived : Base{
std::unique_ptr<Base> clone() const{
return std::make_unique<Derived>();
}
};
int main() {
Derived d;
auto upd = d.clone();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKc3RydWN0IEJhc2V7Cgl2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxCYXNlPiBjbG9uZSgpIGNvbnN0ID0gMDsKfTsKCnN0cnVjdCBEZXJpdmVkIDogQmFzZXsKCXN0ZDo6dW5pcXVlX3B0cjxCYXNlPiBjbG9uZSgpIGNvbnN0ewoJCXJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPERlcml2ZWQ+KCk7Cgl9Cn07CgppbnQgbWFpbigpIHsKCURlcml2ZWQgZDsKCWF1dG8gdXBkID0gZC5jbG9uZSgpOwp9