On Friday, 11. March 2011 13:14:13 Sebastian Redl wrote:
> > if (foo == boost::logic::indeterminate)
> > {
> >
> > std::cout<< "reached2\n";
>
> ...
>
> If you see tribool as a type that can have the three distinct values
> "true", "false", and "indeterminate", then no, it's not intuitive.
> If you instead see tribool as having the two values "true" and "false"
> and in addition the state "indeterminate", which means "could be true or
> false, not sure", then the result of the comparison operators is
> intuitive, but the way they behave in conditions still isn't.
Thanks everyone who replied to the riddle.
I see this in a way of "three-valued logic" as tribool is homed at
boost/logic/tribool.hpp. Boolean logic operations are AND, OR and NOT.
Element comparison of a defined set is not a Boolean logic operation.
Therefore overriding the comparison operator complicated
the use of this library a lot. I showed the example to six
programmers and they all got it wrong.
Or just have a look at this one:
http://stackoverflow.com/questions/3495428/boosttribool-odd-behaviour-or-bug
Certainly the original intention was to make life easier for everyone
by overriding the operator==(). Unfortunately this doesn't seem to be the case, sophisticated professionals or people unfamiliar with the exact details of the boost::tribool operator==() fail at it.
I'm also aware that this interface is in public use
and can't be changed easily to avoid usage errors.
Or can it?
Best regards,
Thomas