#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