#include <iostream>
using namespace std;
class object
{
public:
void set_tag(int t){
tag = t;
}
int get_tag(){
return tag;
}
private:
int tag;
};
template<typename T>
class printer
{
public:
void print()
{
T* obj = static_cast<T*>(this);
std::cout << obj->get_tag() << std::endl;
}
};
class test : public object, public printer<test>
{
};
int main()
{
test t;
t.set_tag(5);
t.print();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3Mgb2JqZWN0CnsKcHVibGljOgoJdm9pZCBzZXRfdGFnKGludCB0KXsKCQl0YWcgPSB0OwoJfQoJCglpbnQgZ2V0X3RhZygpewoJCXJldHVybiB0YWc7Cgl9CgkKcHJpdmF0ZToKCWludCB0YWc7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpjbGFzcyBwcmludGVyCnsKcHVibGljOgoJdm9pZCBwcmludCgpCgl7CgkJVCogb2JqID0gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOwoJCXN0ZDo6Y291dCA8PCBvYmotPmdldF90YWcoKSA8PCBzdGQ6OmVuZGw7Cgl9Cn07CgpjbGFzcyB0ZXN0IDogcHVibGljIG9iamVjdCwgcHVibGljIHByaW50ZXI8dGVzdD4Kewp9OwoKaW50IG1haW4oKSAKewoJdGVzdCB0OwoJdC5zZXRfdGFnKDUpOwoJdC5wcmludCgpOwoJCglyZXR1cm4gMDsKfQ==