Re: template operator== not working
* Ben Voigt [C++ MVP]:
I already gave example of ensuring constant lhs, and in fact I
already mentioned that I did, so we're two levels away from that, but
again, just for variety:
Rational const c = ...
if( c == a*b ) ... // OK
if( c = a*b ) ... // Typo, won't compile.
You now have an extremely limited example which does not generalize well at
all.
Yes, that's correct. I think I've already said enough about the const lhs
technique so I shall not elaborate on its many failings.
How about comparing a*b to c*d?
What about it?
Is the question how to apply const lhs technique to that case?
Not that I recommend it, but it would go like this:
Rational const ab = a*b;
Rational const cd = c*d;
if( ab == cd ) ...
You have to make the return type of
operator* const to prevent the error in a general way.
As already shown else-thread, no, writing = for == can be detected at compile
time in other ways, the most effective and (IMHO) least ugly to make '=' for
assignment invalid. That it's possible does not mean it's a good idea, because
the problem it means to avoid is insignificant and will be detected anyway if it
occurs, and the solution has associated costs, namely non-conventional notation,
reducing readability and clarity. Just as it isn't a good idea, in general, to
make rvalues const, because the problem is insignificant and will be detected
anyway, e.g. through testing or via compiler warnings, and the solution has
associated costs, in particular prohibiting an important possible optimization.
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?