/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <iostream>
using namespace std;
template<typename T>
struct A{
T data;
};
template<typename T>
class B{
T data;
};
void test(A<B<int>> &, A<B<int>> &, A<B<int>> &){
printf("1");
};
template<typename T>
void test(A<B<T>> &, A<B<T>> &, A<B<T>> &){
printf("2");
};
template<typename T, typename TT>
void test(A<B<T>> &, A<B<T>> &, A<B<TT>> &){
printf("3");
};
template<typename T>
void test(A<T> &, A<T> &, A<T> &){
printf("4");
};
template<typename T, typename TT>
void test(A<T> &, A<T> &, A<TT> &){
printf("5");
};
template<typename T>
void test(T &, T &, T &){
printf("6");
};
template<typename T, typename TT>
void test(T &, T &, TT &){
printf("7");
};
void OnStart(){
A<B<int>> a_b_int;
A<B<double>> a_b_double;
A<int> a_int;
A<double> a_double;
B<int> b_int;
B<double> b_double;
test(a_b_int, a_b_int, a_b_int); // 1
test(a_b_double, a_b_double, a_b_double); // 2
test(a_b_int, a_b_int, a_b_double); // 3
test(a_int, a_int, a_int); // 4
test(a_int, a_int, a_double); // 5
test(b_int, b_int, b_int); // 6
test(b_int, b_int, b_double); // 7
}
int main()
{
OnStart();
return 0;
}