#include <iostream>
 
class MyClass
{
 
};
 
template <typename Object>
class List
{
public:
 
    template<class C = Object>
    void insert(const C & x)
    {
        // call when Object is MyClass
    	std::cout << "1" << "\n" ;
    }
 
    template<class P = Object*>
       void insert(P* p)
    {
        // call when Object is MyClass*
    	std::cout << "2" << "\n" ;
    }
} ;
 
int main()
{
    MyClass a;
 
    List<MyClass> lst;
    List<MyClass*> plst;
 
    lst.insert(a);
    plst.insert(new MyClass);
 
    return 0;
}