On Fri, Mar 11, 2011 at 11:53 AM, Thomas Jarosch <thomas.jarosch@intra2net.com> wrote:
Hello,

here's a small boost::logic::tribool riddle:

-<snip>-------------------------------------

#include <iostream>
#include <boost/logic/tribool.hpp>

int main(void)
{
   boost::logic::tribool foo(boost::logic::indeterminate);
   if (foo != true)
   {
       std::cout << "reached1\n";
   }

   if (foo == boost::logic::indeterminate)
   {
       std::cout << "reached2\n";
   }

   return 0;
}

-<snap>-------------------------------------

Try to determine the printed result without looking
at the boost::logic::tribool implementation / documentation.

Intuitive?


Ok, I guessed, got it wrong, read the docs, and still don't get it! Modifying
your example to...

#include <iostream>
#include <boost/logic/tribool.hpp>

int main(void)
{
   boost::logic::tribool foo(boost::logic::indeterminate);
   if (foo != true)
   {
       std::cout << "reached1\n";
   }

   if (foo == boost::logic::indeterminate)
   {
       std::cout << "reached2\n";
   }

   if (boost::logic::indeterminate == boost::logic::indeterminate)
   {
       std::cout << "reached3\n";
   }

   return 0;
}

only prints "reached3", so I can see the logic of second test being
indeterminate rather than true, but then surely the comparing indeterminate
with indeterminate should also be true?

Weird!

- Rob.