#include <iostream>
template<typename T>
class Base
{
public:
template <typename M>
void install(void (T::*method)(int))
{
std::cout << "Hello" << std::endl;
}
};
template<typename T>
class Child : public Base<T>
{
public:
void test()
{
this->template install<double>(
&T::print);
}
};
class Grandson : public Child<Grandson>
{
public:
void print(int n)
{
std::cout << "Num:" << n << std::endl;
}
};
int main()
{
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgQmFzZQp7CnB1YmxpYzoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTT4KICB2b2lkIGluc3RhbGwodm9pZCAoVDo6Km1ldGhvZCkoaW50KSkKICB7CiAgICBzdGQ6OmNvdXQgPDwgIkhlbGxvIiA8PCBzdGQ6OmVuZGw7CiAgfQp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgQ2hpbGQgOiBwdWJsaWMgQmFzZTxUPgp7CnB1YmxpYzoKICB2b2lkIHRlc3QoKQogIHsKICAgIHRoaXMtPnRlbXBsYXRlIGluc3RhbGw8ZG91YmxlPigKICAgICAgICAmVDo6cHJpbnQpOwogIH0KfTsKCmNsYXNzIEdyYW5kc29uIDogcHVibGljIENoaWxkPEdyYW5kc29uPgp7CnB1YmxpYzoKICB2b2lkIHByaW50KGludCBuKQogIHsKICAgIHN0ZDo6Y291dCA8PCAiTnVtOiIgPDwgbiA8PCBzdGQ6OmVuZGw7CiAgfQp9OwoKaW50IG1haW4oKQp7CgkKfQ==