#include <iostream>
#include<map>
#include<string>
#include<vector>
template<class A, class B, class C>
struct test{
//declaration for constructor one
test(A,B,C);
//declaration for constructor two
test(A,B);
};
//implementation for constructor one
template<class A, class B, class C>
test<A,B,C>::test(A a, B b, C c)
{
std::cout<<"constructor with 3 parameters called"<<std::endl;
}
//implementation for constructor two
template<class A, class B, class C>
test<A,B,C>::test(A a, B b)
{
std::cout<<"constructor with 2 parameters called"<<std::endl;
}
int main()
{
test<int, double, int> t1(2,2,3);//calls constructor with 3 parameters
test<int, double, int> t2(2,2);//calls constructor with 2 parameters
return 0;
}