#include <iostream>
using namespace std;
template<typename T>
class A {
public:
// void test() {
// cout << "A::test" << endl;
// }
void callTest() {
static_cast<T *>(this)->test();
}
};
class B : public A<B> {
public:
void test() {
cout << "B::test" << endl;
}
};
int main() {
B b;
b.callTest();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgQSB7CnB1YmxpYzoKCS8vIHZvaWQgdGVzdCgpIHsKCS8vIAljb3V0IDw8ICJBOjp0ZXN0IiA8PCBlbmRsOwoJLy8gfQoJCgl2b2lkIGNhbGxUZXN0KCkgewoJCXN0YXRpY19jYXN0PFQgKj4odGhpcyktPnRlc3QoKTsKCX0KfTsKCmNsYXNzIEIgOiBwdWJsaWMgQTxCPiB7CnB1YmxpYzoKCXZvaWQgdGVzdCgpIHsKCQljb3V0IDw8ICJCOjp0ZXN0IiA8PCBlbmRsOwoJfQp9OwoKaW50IG1haW4oKSB7CglCIGI7CgliLmNhbGxUZXN0KCk7CgoJcmV0dXJuIDA7Cn0=