#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()
{
	
}