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