Вы должны сделать это:
template <class T2>
Number<T>& operator=( const Number<T2>& number )
{
m_value = number.value();
return *this;
}
То есть используйте T2
в типе параметра, а не в типе возвращаемого значения!
Я бы предпочел использовать другую букву для параметра шаблона:
template <class U>
Number<T>& operator=( const Number<U>& number )
{
m_value = number.m_value; //I would also directly access the member variable!
return *this;
}
Я думаю, что лучше использовать явное приведение, если вы хотите использовать тип класса какаргумент шаблона и конструктор которого был объявлен explicit
:
m_value = static_cast<T>(number.m_value);
Кстати, другой operator=
должен быть реализован как:
Number<T>& operator=(T const & value ) //accept by const reference
{
m_value = value;
return *this; //you've to return!
}