#include <iostream>
void foo()
{
std::cout << "global foo()" << std::endl;
}
struct A {
void foo()
{
std::cout << "A::foo()" << std::endl;
}
};
template <typename T>
struct B : public T {
void call()
{
foo();
}
};
int main(int argc, char **argv )
{
B<A> b;
b.call();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdm9pZCBmb28oKQp7CiAgICBzdGQ6OmNvdXQgPDwgImdsb2JhbCBmb28oKSIgPDwgc3RkOjplbmRsOwp9CgpzdHJ1Y3QgQSB7CiAgICB2b2lkIGZvbygpCiAgICB7CiAgICBzdGQ6OmNvdXQgPDwgIkE6OmZvbygpIiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IEIgOiBwdWJsaWMgVCB7CiAgICB2b2lkIGNhbGwoKQogICAgewogICAgICAgIGZvbygpOwogICAgfQp9OwoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKewogICAgQjxBPiBiOwogICAgYi5jYWxsKCk7CiAgICByZXR1cm4gMDsKfQo=