#include <iostream>
using namespace std;

template<class T>
class MyClass{
private:
        T value;
public:
    void assign(const MyClass<T> & obj)
    {
        this->value=obj.value;
    }  
    
    MyClass(T value)
    {
        this->value=value;
    }
};


template<class T>
class MyClass2{
private:
        T value;
public:
    template<class X>
    void assign(const MyClass2<X> & obj)
    {
        this->value=obj.getValue();
    }  
    
    MyClass2(T value)
    {
        this->value=value;
    }

    T getValue() const
    {
        return this->value;
    }
};

void main()
{
    MyClass<double> d(2.3);
    MyClass<double> i(5);//MyClass<int> i(5);
    d.assign(i);

    MyClass2<double> d2(2.3);
    MyClass2<int> i2(5);
    d2.assign(i2);

}