#include <iostream>
using namespace std;
struct A{
virtual void foo() = 0;
};
struct B:A{
void foo() { cout<< "A" << endl;};
};
struct C:A{
void foo() { cout<< "C" << endl;};
};
template <class T>
struct enc{
T in; // should be private, I'm just lazy :)
A &a;
int x;
enc(): in(T()), a(in), x(0) {
}
};
int main() {
enc<C> c;
c.a.foo();
enc<B> b;
b.a.foo();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEF7Cgl2aXJ0dWFsIHZvaWQgZm9vKCkgID0gMDsKfTsKCnN0cnVjdCBCOkF7Cgl2b2lkIGZvbygpICB7IGNvdXQ8PCAiQSIgPDwgZW5kbDt9Owp9OwoKc3RydWN0IEM6QXsKCXZvaWQgZm9vKCkgIHsgY291dDw8ICJDIiA8PCBlbmRsO307Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IGVuY3sKCVQgaW47IC8vIHNob3VsZCBiZSBwcml2YXRlLCBJJ20ganVzdCBsYXp5IDopCglBICZhOwoJaW50IHg7CgllbmMoKTogaW4oVCgpKSwgYShpbiksIHgoMCkgewoJfQoJCn07CmludCBtYWluKCkgewoJZW5jPEM+IGM7CgljLmEuZm9vKCk7CgllbmM8Qj4gYjsKCWIuYS5mb28oKTsKCXJldHVybiAwOwp9