#include <iostream>
#include <memory>
class Foo {};
template <typename T>
class A {
public:
virtual void foo() = 0;
};
template <typename S, typename T>
class B : public A<T> {
public:
void foo() override {
std::cout << "Hello";
}
};
int main() {
std::unique_ptr<B<int, Foo>> t = std::make_unique<B<int, Foo>>();
std::unique_ptr<A<Foo>> p = std::move(t);
p->foo();
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKY2xhc3MgRm9vIHt9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIEEgewogIHB1YmxpYzoKCXZpcnR1YWwgdm9pZCBmb28oKSA9IDA7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgUywgdHlwZW5hbWUgVD4KY2xhc3MgQiA6IHB1YmxpYyBBPFQ+IHsKICBwdWJsaWM6Cgl2b2lkIGZvbygpIG92ZXJyaWRlIHsKCQlzdGQ6OmNvdXQgPDwgIkhlbGxvIjsKCX0KfTsKCmludCBtYWluKCkgewoJc3RkOjp1bmlxdWVfcHRyPEI8aW50LCBGb28+PiB0ID0gc3RkOjptYWtlX3VuaXF1ZTxCPGludCwgRm9vPj4oKTsKCXN0ZDo6dW5pcXVlX3B0cjxBPEZvbz4+IHAgPSBzdGQ6Om1vdmUodCk7CglwLT5mb28oKTsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXJldHVybiAwOwp9