template class MyClass { private: T value; public: template // Шаблон функции позволяет void assign (const MyClass& x) { // использовать другие типы value = x.getValue(); // шаблонов при присваивании. } T getValue () const { return value; } ... }; void f() { MyClass d; MyClass i; d.assign(d); // OK d.assign(i); // OK (тип int совместим с double по присваиванию) }