#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); }