Your code
class Diagonal : public Matrix<T>
{
operator Matrix<T>() const;
};
defines a conversion from Diagonal<T>
to Matrix<T>
, whereas your assignment expects a conversion from Matrix<T>
to Diagonal<T>
.
Did you mean to write this instead?
class Matrix<T>
{
operator Diagonal<T>() const;
};
Now even if this works* (which I doubt, since it will cause a cyclic dependency), I'm not sure if it makes sense from a semantic perspective. Not every matrix is a diagonal matrix, so converting from a matrix into a diagonal matrix cannot preserve all data. Using implicit conversions for this situation is a bad idea from a design perspective.
*An alternative would be to define operator=(const Matrix<T>&)
for Diagonal<T>
.