template<typename T2>
void operator=(T2& obj2) { ... }
определяет функцию operator=
, но она не является оператором копирования в соответствии со стандартом. Чтобы считаться оператором копирования, оно должно быть:
void operator=(Samble& obj2) { ... }
или лучше
Sample& operator=(Sample const& obj2) { ... }
Учитывая ваш код, вы можете использовать:
Sample<int> a;
Samble<double> b;
b = a;
Если бы у вас был реальный оператор присваивания копии, он не смог бы скомпилироваться.