For me, this is a question about what I usually want to do with objects.
Take the lines, for example. In 99% of all cases, you are comparing two lines to check for equality, not whether both variables point to the same line.
You also write:
int x, y; if( x == y ) ..
So why do you want to force yourself to use:
BigNum x, y; if( x.Equals(y) ) ...
Of course, this is a source of errors (like most operator overloads), but I think that taking into account the correct context (for example, an object where it is obvious that you want to compare its value), then this is a good thing for overloading. If it is ambiguous, then I will always stick to Equals () and not overload ==.
s3rius
source share