#include <iostream>
using namespace std;
template<typename _Tp>
struct It_wrapper{
_Tp p;
};
template<typename _Tp>
struct It_g : public It_wrapper<_Tp>{};
template<typename _It, typename _Tp>
int __test_print(const It_wrapper<_It> &it, int n, const _Tp &value){
//Print(it.p);
std::cout << it.p << std::endl;
return 0;
};
template<typename _It>
int test_print(const It_wrapper<_It> &it, int n, const int value){
return __test_print(it, n, value);
}
template<typename _It, typename _ValueType>
int test_print(const It_wrapper<_It> &it, int n, const _ValueType &value){
return __test_print(it, n, value);
}
void OnStart(){
It_g<int> it;
It_g<string> it_s;
it.p = 4;
it_s.p = "test";
const int n = 10;
test_print(it, 5, n);
test_print(it_s, 5, n);
};
int main(){
OnStart();
return 1;
};